2013-05-12 70 views
0

用于测试目的无用中间件:Express.js控制台中未定义的内容来自何处?

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 
+0

'require('path')'位很愚蠢。它仅用于'__dirname'行之一。可能没有必要,因为它所做的只是添加一个'/'或'\',这取决于你的操作系统,这在生产中不会改变。只是我的2c – 2013-05-13 06:47:48

回答

-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()

+0

利用favicon中间件http://www.senchalabs.org/connect/favicon.html'next(err)'被使用。 – gremo 2013-05-12 11:42:18

+0

'next(err)'是错误处理,你将错误传给下一个中间件。如果你只是随机踢他们,那么不需要那个。 – user568109 2013-05-12 13:38:11

1

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

这是一段时间,因为我用默认errorHandler所以我不是100%确定。如果它不是downvote,我会删除这个答案。

相关问题