【问题标题】:Where this undefined in Express.js console is coming from?Express.js 控制台中的这个 undefined 来自哪里?
【发布时间】:2013-05-12 09:22:50
【问题描述】:

用于测试目的的无用中间件:

module.exports = function () {
    return function rankick(req, res, next) {
        if (Math.random() < 0.5) {
            return next('Random kick...');
        }

        next();
    };
};

注入到一个简单的快递应用中:

var express = require('express'),
    http = require('http'),
    path = require('path')
    rankick= require('./rankick'),
    util = require('util');

var app = express();

app.set('port', process.env.PORT || 8080);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(rankick()); // Using the middleware

if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.use(function (req, res, next) {
    res.end('Hello World!');
});

http.createServer(app).listen(app.get('port'));

当使用错误字符串调用next() 时,控制台会记录undefined,后跟500 错误:

undefined
GET / 500 28ms
GET / 200 4ms
undefined
GET / 500 5ms

【问题讨论】:

  • require('path') 有点傻。它仅用于__dirname 行之一。可能没有必要,因为它所做的只是根据您的操作系统添加“/”或“\”,这在生产中不会改变。只是我的 2c

标签: node.js express undefined middleware


【解决方案1】:

errorHandler middleware 中的这一行吗?也许它期望得到一个新的错误('随机踢..')?

自从我习惯使用默认的 errorHandler 以来已经有一段时间了,所以我不能 100% 确定。如果它没有被否决,我会删除这个答案。

【讨论】:

    【解决方案2】:

    你应该这样做

    module.exports = function rankick(req, res, next) {
        if (Math.random() < 0.5) {
            console.log('Random kick...');
        }
        else
            next();
    };
    

    不要使用return来传递函数。 module.exports 是调用 require 时传递的对象。

    如果您想继续处理到下一个中​​间件,还应该调用 next()。如果您想停止处理/踢请求,请不要致电next()

    【讨论】:

    • Loot at favicon middleware senchalabs.org/connect/favicon.html next(err) 被使用。
    • next(err) 是错误处理,您将错误传递给下一个中间件。如果你只是随意踢他们,那就没必要了。
    猜你喜欢
    • 2017-06-04
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多