0

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

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
4

2 回答 2

1

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

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

于 2013-05-12T17:01:07.537 回答
-1

你应该做

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

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

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

于 2013-05-12T10:23:12.773 回答