-
模板渲染
- render上下文传参
router.get('/path',(req,res)=>{ res.render('tpl',{foo:'bar'}); });
仅仅适用于传参到当前路由页面
- res.locals传参
router.get('/path',(req,res)=>{ res.locals.foo ='bar'; res.render('tpl'); });
适用于多个路由共享参数,优先级低于render上下文传参
-
公共模板页
- 默认 layout.hbs
可将页面全局公共部分(导航栏、页脚等)放于此文件中,示例:
<!DOCTYPE html> <html> <head> <title>{{title}}</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> {{!-- 导航栏 --}} <div> <a href="/path1">页面一</a> <a href="/path2">页面2</a> </div> {{{body}}} </body> </html>
-
设置特定模板页
新建模板页layout2.hbs,使用render方法渲染页面时,设置layout参数为layout2地址
router.get('/path',(req,res)=>{ res.render('tpl',{layout:'模板path'}); });
-
中间件:请求、响应对象预处理函数
通常情况下,客户端或浏览器发送一个请求到服务器后,获取请求参数、记录日志、cors跨域处理等都是非常常见的预处理操作。
express为我们提供了很多中间件,其中需要注意的是,路由中间件一般注册在所有中间件的最后,路由的先后顺序也需要注意,前面的路由优先级比后面路由的优先级高的话,后面的路由永远都匹配不到。
app.use(logger('dev')); //日志 app.use(express.json()); //获取ajax传递json app.use(express.urlencoded({ extended: false })); //解析url参数 app.use(cookieParser()); //cookie解析 app.use(express.static(path.join(__dirname, 'public'))); //设置静态目录 app.use('/xx', xxx);
自定义中间件
根目录下新建middleware目录,并在该目录下新建Index.js文件,添加以下内容
module.exports.middlewareName = function (req,res,next){ //中间件操作 //.... next(); //进入后续中间件 }
如果当前的中间件函数没有结束请求 - 响应周期,它必须调用next()将控制权传递给下一个中间件函数。否则,请求将被挂起
app.js中引入自定义中间件,放置于express中间件和路由中间件之间
//引入中间件 const {middlewareName} = require('./middleware'); //... app.use(logger('dev')); //日志 app.use(express.json()); //获取ajax传递json app.use(express.urlencoded({ extended: false })); //解析url参数 app.use(cookieParser()); //cookie解析 app.use(express.static(path.join(__dirname, 'public'))); //设置静态目录 //注册自定义中间件 app.use(middlewareName); app.use('/xx', xxx);
node学习笔记(三)
最新推荐文章于 2023-05-20 17:33:13 发布