express.js res.sendFile发送后无法设置标头

时间:2016-03-11 13:56:21

标签: express

我有以下代码:

app.use(function (req, res, next) {  
    // res.sendfile(__dirname + '/forms.html');
    try {
        // serve html snapshot
        res.sendFile(__dirname + '/forms.html');
    } catch (err) {
        // no snapshot available, serve 404 error
        res.send(404);
    } 
    return next();
});           

但是在跑步时出现以下错误:

Error: Can't set headers after they are sent.
    at SendStream.headersAlreadySent (/local/home/admin-gst/web/test/lza/node_modules/express/node_modules/send/index.js:326:13)
    at SendStream.send (/local/home/admin-gst/web/test/lza/node_modules/express/node_modules/send/index.js:525:17)
    at onstat (/local/home/admin-gst/web/test/lza/node_modules/express/node_modules/send/index.js:624:10)
    at FSReqWrap.oncomplete (fs.js:82:15)

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

由于您的app.use未指定路由,因此会在每个请求中调用它。如果被击中的路线也试图发送响应(我假设这是基于错误发生的事情),例如。

app.get('/someRoute', function(req, res) {res.send('success');});

您将收到此错误,因为响应已在您的中间件中发送。

您需要在路由中而不是中间件中执行res.sendFile,或者仅在中间件未发送响应时才有条件地调用next(),以便在中间件上停止执行。