【问题标题】:express.js res.sendFile Can't set headers after they are sentexpress.js res.sendFile 发送后无法设置标头
【发布时间】:2016-03-11 13:56:21
【问题描述】:

我有以下代码:

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)

谁能帮忙?

【问题讨论】:

  • 不清楚你在做什么。请贴出完整代码

标签: express


【解决方案1】:

由于您的 app.use 没有指定路由,因此每次请求都会调用它。如果被命中的路由也尝试发送响应(我假设这是基于错误发生的情况),例如

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

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

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

【讨论】:

  • 是的,你说得对。但我的问题是如何将表单集成到我的中间件中,当表单提交时,我想自动转到下一个中​​间件。
  • 这不是你问的问题。您应该关闭此问题并发布一个新问题,详细说明您要完成的工作。
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2015-09-08
  • 2021-07-21
  • 2020-04-30
  • 2014-02-13
相关资源
最近更新 更多