Node.js Express框架(二)

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 %>

你可能感兴趣的:(Node.js Express框架(二))