express学习

作者: JohnsonChe | 来源:发表于2016-10-02 09:05 被阅读55次

    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()函数装入的中间件函数中有效。

    相关文章

      网友评论

        本文标题:express学习

        本文链接:https://www.haomeiwen.com/subject/oczxettx.html