【问题标题】:Connecting middleware in Node.js/Express在 Node.js/Express 中连接中间件
【发布时间】:2013-09-09 17:14:29
【问题描述】:

以下是 Node.js/Express 网络服务器的简单示例:

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

app.get('/*', function(req, res){
   res.end('Hello, you requested ' + req.url + '.');
});

app.listen(3000);

当它运行时,请求http://localhost:3000/Hello-world会生成响应

Hello, you requested /Hello-world.

要了解中间件,我想重新实现此服务器,但使用中间件将“获取数据”、“操作数据”和“输出数据”包含在单独的函数中。我曾尝试关注,但对于此代码,请求 http://localhost:3000/Hello-world 没有响应。只有app.get(..) 代码似乎在执行。

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

// Step 1: get input
app.get('/*', function(req, res){
   req['testing'] = req.url;
});

// Step 2: manipulate data
app.use('/*', function(req, res, next) {
   req['testing'] = 'Hello, you requested ' + req['testing'];
   return next();
});

// Step 3: send output  
app.use('/*', function(req, res, next) {
    res.end(req['testing']);
    return next();
});

app.listen(3000);

似乎缺少将功能连接在一起的东西?

【问题讨论】:

    标签: node.js express connect middleware


    【解决方案1】:
    //This needs to be MIDDLEWARE not a route handler
    // Step 1: get input
    app.use(function(req, res, next){
       req.testing = req.url;
       next();
    });
    
    // Step 2: manipulate data
    app.use(function(req, res, next) {
       req.testing = 'Hello, you requested ' + req.testing;
       next();
    });
    
    // Step 3: send output  
    app.get('/*', function(req, res) {
        res.end(req.testing);
    });
    

    【讨论】:

    • 谢谢。这行得通!所以,如果我理解正确的话:app.use-functions 在任何请求上都会被调用,并且这些函数会按照它们被调用的顺序执行(因此,步骤 1 在步骤 2 之前执行)。 app.getGET 请求上执行,这些请求在之后执行。
    • stackoverflow.com/questions/8710669/…也有一个很好的解释
    • @user2692274 通常。无论路由器走到哪里,GET 请求都会执行,您可以使用app.use(app.router) 进行调整。通常它是在错误处理路由之前的倒数第二个,但是 express 很容易不小心把路由器放得太早,事情就搞砸了。
    • 请您帮忙解释一下。这帮助很大。
    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 2012-04-11
    • 2016-04-30
    • 1970-01-01
    • 2012-04-21
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多