1.通过req.params获取路由中的参数
使用:号分隔路径,这些路径将被以对象的形式保存到req.params中
app.get('/item/:year/:month/:day', function (req, res) {
res.send(req.params);
})
浏览器地址栏输入:http://localhost:8080/item/2019/5/19
返回结果:{"year":"2019","month":"5","day":"19"}
2.通过express模拟Apache实现静态资源托管服务
express.static(root, [options])返回静态资源文件,并且会自动设置响应的文档类型
参数一:静态资源的根目录
//加载express
const express = require('express');
const path = require('path');
//1.创建一个app对象(类似于server的对象)
//设置静态资源的根目录为public
var app = express();
//模拟Apache实现静态资源托管服务
app.use('/', express.static(path.join(__dirname,'public')));
//启动服务
app.listen(8080,function(){
console.log('http://localhost:8080');
})
- 设置虚拟路径
假设图片index.html的地址是public/index.html,那么此时访问的地址应该是http://localhost:8080/resources/index.html,在解析静态资源的文件路径时会忽略'/resources'这个虚拟路径
app.use('/resources', express.static(path.join(__dirname,'public')));
- 设置多个根目录
如果为一个路径设置了多个根目录,则先从第一个目录查找资源,找到则返回,找不到则继续从下一个目录查找,知道找到为止
app.use('/xxx', express.static(path.join(__dirname,'public')));
app.use('/yyy', express.static(path.join(__dirname,'public')));
3.res对象常用方法
- res.json(对象):将对象转化成json对象再响应给浏览器
res.json({name:'赵日天'});
//浏览器显示 {"name":"赵日天"}
- res.redirect([status,] path):重定向
参数一(可选):默认302
参数二:要跳转的网址
res.redirect('https://www.baidu.com/');
- res.sendFile(path [,options] [,fn]):解析文件到浏览器,并自动设置相应的文档类型
res.sendFile(path.join(__dirname,'public','index.html'));
- res.status(状态码):设置http状态码
res.status(400).send('Bad Request');
4.封装路由模块
最好不要把app这个对象传递给router这个模块,因为router这个模块可以拿他做路由之外的事情。
开启服务的模块
//app.js
//加载express
const express = require('express');
const router = require('./router.js');
//1.创建一个app对象(类似于server的对象)
var app = express();
//当访问根目录时就运行router这个函数
app.use('/',router);
//如果监听的是根目录,路径可以省略不写,等价于
//app.use(router);
//启动服务
app.listen(8080,function(){
console.log('http://localhost:8080');
})
路由模块
//router.js
const express = require('express');
//express.Router()既是一个对象也是一个函数
var router = express.Router();
router.get('/',function(req,res){
})
router.get('/item',function(req,res){
})
router.get('/submit',function(req,res){
})
router.get('/add',function(req,res){
})
router.post('/',function(req,res){
})
module.exports=router;
5.16-res.sendFile和res.render
- res.sendFile()不能对文件里面的模版代码进行替换,所以不适合渲染模版文件
- res.render()默认不能使用,要为其配置模版引擎才能使用(只有与express兼容的模版引擎才能使用http://www.expressjs.com.cn/guide/using-template-engines.html
) - 推荐ejs模版引擎
6.ejs模版引擎的使用
ejs模版引擎可以独立使用,也可以配置到express里面使用
下面就是配置到express里面的使用方法
//app.js
//引入ejs
const ejs = require('ejs');
//1.创建一个app对象(类似于server的对象)
var app = express();
//设置模版文件的目录
app.set('views', './public');
//设置模版引擎
app.set('view engine', 'ejs');
//res.render()传入文件路径,文件后缀一定要是.ejs
//模版数据类型使对象类型
res.render(path.join(__dirname,'public','item.ejs'),{title:'这是标题',link:'这是链接',content:'这是内容'});
模版item.ejs
<%= title %>
<%= link %>
<%= content %>