我有以下代码:
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)
有人可以帮忙吗?
答案 0 :(得分:2)
由于您的app.use未指定路由,因此会在每个请求中调用它。如果被击中的路线也试图发送响应(我假设这是基于错误发生的事情),例如。
app.get('/someRoute', function(req, res) {res.send('success');});
您将收到此错误,因为响应已在您的中间件中发送。
您需要在路由中而不是中间件中执行res.sendFile,或者仅在中间件未发送响应时才有条件地调用next(),以便在中间件上停止执行。