Express
Express 框架核心特性:
1 可以设置中间件来响应HTTP请求
2 定义了路由表用于执行不同的HTTP请求动作
3 可以通过模板传递参数来动态渲染HTML页面
安装experss ,需要同时安装一下几个重要的模块:
body-parser - node的中间件,用于处理JSON rAW,tEXT和URL编码的数据
cookie-parser 这就是一个解析Cookie的工具。通过req.cookies 可以取到传过来的cookie,并把它们转成对象
multer - node中间件,用于处理enctype='multipart/form-data' (设置表单的MIME编码)的表单数据。
静态文件
Express 提供了内置的中间件express.static来设置静态文件。
如果把静态文件放在public文件夹下,可以这样写:
app.use('/public',express.static('public'));
app.use('static',express.static('public')); 现在可以通过访问带有/static前缀地址来访问public目录中的文件了;
但是这样,express.static方法提供的是一个相对路径,如果运行express 的app在别的文件下,最好使用使用绝对路径:
app.use('/static',express.static(path.join(__dirname,'public')))
一个express应用可以使用一下类型的中间件:
1 应用层级的中间件
2 路由层级的中间件
3 错误处理中间件
4 内置的中间件
5 第三方的中间件
1 应用层及的中间件,
每次app接收一个请求都会执行
app.use(function(req,res,next){ console.log('Time:',Date.now()); });
特定的请求才会执行
app.use('/user/:id',function(req,res,next){
console.log('request type',req.method);
next();
});
路由器级中间件
app.get('/user/:id', function (req, res, next) {
  res.send('USER')
})
一个中间件可以有多个回调函数,这时前一个回调函数必须有第三个参数next,并执行next()方法把req res移交给下一个回调函数,否则下一个永远不会执行,如果没有执行next,并且也没有回应,这个请求会一直处于挂载状态
app.get('/user/:id', function (req, res, next) {
  // if the user ID is 0, skip to the next route
  if (req.params.id === '0') next('route')
  // otherwise pass the control to the next middleware function in this stack
  else next()
}, function (req, res, next) {
  // send a regular response
  res.send('regular')
})
// handler for the /user/:id path, which sends a special response
app.get('/user/:id', function (req, res, next) {
  res.send('special')
})
第二个中间件永远不会执行,做如下修改,第二个中间件会被执行
app.get('/user/:id', function (req, res, next) {
  // if the user ID is 0, skip to the next route
  if (req.params.id === '0') next('route')
  // otherwise pass the control to the next middleware function in this stack
  else next()
}, function (req, res, next) {
  // send a regular response
 console.log('regular')
next()
})
// handler for the /user/:id path, which sends a special response
app.get('/user/:id', function (req, res, next) {
  res.send('special')
})
2 路由层级的中间件和应用层级的中间件是一样的,除了路由层级中间件是绑定到express.router()的一个实例
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号