res.send没有在快递

时间:2016-08-04 13:51:16

标签: node.js express middleware

我想要做的是修改响应正文。

为此我使用的是一个在每次请求时调用的中间件。 为了实现它,我从github https://github.com/ccoenraets/nodecellar获取了一个演示应用程序。我在server.js中添加了一个类似于express logging response body上给出的示例的中间件。

我还是无法修改响应体,因为res.send = function(string)没有被调用。

下面提到的是代码。请让我知道我在这里做错了什么。

 var express = require('express'),
path = require('path'),
http = require('http'),
wine = require('./routes/wines');

var app = express();
app.configure(function () {
    app.set('port', process.env.PORT || 4000);
    app.use(express.logger('dev'));  /* 'default', 'short', 'tiny', 'dev' */
    app.use(express.bodyParser()), 
    app.use(express.static(path.join(__dirname, 'public')));
    app.use(logResponseBody);
});

app.get('/wines', wine.findAll);
app.get('/wines/:id', wine.findById);
app.post('/wines', wine.addWine);
app.put('/wines/:id', wine.updateWine);
app.delete('/wines/:id', wine.deleteWine);
http.createServer(app).listen(app.get('port'), function () {
    console.log("Express server listening on port " + app.get('port'));
    });
 function logResponseBody(req,res,next){
 var send = res.send; 
 console.log("send resp is: "+send);
 res.send = function (string) {
 var body = string instanceof Buffer ? string.toString() : string;
   console.log("Body found is: "+body);
   body = body.replace(/<\/head>/, function (w) {
   return 'Modified head' + w;
  });
 send.call(this, body);
 }; 
 res.on('finish', function(){
console.log("Finished " + res.headersSent); // for example
console.log("Finished " + res.statusCode);  // for example
})
next();
} 

PS:我正在为一个类似的问题开始一个新线程,因为我的声誉不到50。因此无法在那里添加评论。

1 个答案:

答案 0 :(得分:0)

将中间件添加到快速应用程序的最佳方法是使用app.use方法,这样您就可以删除整个http.createServer块并将其替换为类似

的内容
var myModule = (function(){

    var public = {
        obj: {},
        updateObj: function(newObj) {
            public.obj = newObj;
        }
    }

    return public;

}())

有关app.use的更多信息,请查看the express app use documentation