express学习

app.js文件:

var express = require('express');
var app = express();

var requestTime = function(req, res, next) {
      req.requestTime = Date.now();
      next();
};
app.use(requestTime);
app.get('/', function(req, res) {
      var responseText = 'Hello World!<br>';
      responseText += '<small>Requested at: ' +req.requestTime + '</small>';
      res.send(responseText);
});

app.listen(3000, function() {    console.log('Example app listening on port 3000!');});

执行

node app.js

起服务之后,个人理解这边 ** app.use(requestTime) **好比是进行一次请求后的回调处理,所以每请求一下localhost:3000/这个路径便会输出 ** Hello world Requested at: xxxxxx(时间戳) **。

由于app.use()是中间件方法,所以它能访问request对象和response对象以及在请求-响应循环中的next中间件函数。

** function(req, res, next) **这边的第三个参数可以是任何名称,但建议取名为next,官方文档是这样建议的。

中间件函数的执行任务的过程:

  • 执行代码
  • 对请求以及响应对象做些改变
  • 结束请求-响应的循环。
  • 在栈中通知下一个中间件方法。

如果目前的中间件方法没有结束请求-响应的循环,必须调用next()方法传递给下一个中间件方法,否则请求会被一直挂起。

一个express应用能用以下几种中间件:

  • 应用层中间件
  • 路由层中间件
  • 错误处理中间件
  • 内建中间件
  • 第三方中间件

在加载应用层和路由层中间件时能够加一个可选的安装路径。中间件方法也能够连续加载。

比如你在根目录中创建一个bird.js:

var express = require('express');

router.use(function timeLog(req, res, next) {
     console.log('Time', Date.now());
     next();
});

router.get('/', function(req, res) {
    res.send('Birds home page');
});

module.exports = router;

在app.js中可以有:

注: app.use()方法能够通过任何一种http方法(get, post, put等方法)访问。

应用层的方法有: app.use()和app.METHOD()。app.METHOD方法指的是HTTP请求方法。

以下例子:

app.get('/user/:id', function (req, res, next) {
    console.log('ID:', req.params.id);    next();
}, function (req, res, next) {
    res.send('User Info');});
// handler for the /user/:id path, which prints the user ID
app.get('/user/:id', function (req, res, next) {
    res.end(req.params.id);
});

Route处理使你能够对一个路径定义多个路由。以上例子第二个get不会被执行到,因为请求-响应循环在第一个get之后就结束了。

要跳过路由器中间件堆栈中剩余的中间件树,请用next('route')将控制权传递给下一个路由。注:next('route')仅在使用app.METHOD或router.method()函数装入的中间件函数中有效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容