首页 > 解决方案 > 表单提交上的另一个“无法设置标题后发送给客户端”

问题描述

当我将文本提交到我的 node.js 服务器的单字段表单时,我收到以下错误:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:485:11)
    at ServerResponse.header (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\response.js:771:10)
    at ServerResponse.json (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\response.js:264:10)
    at ServerResponse.send (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\response.js:158:21)
    at C:\Users\hbhar\Desktop\Basic WebApp\routes\index.js:15:9
    at Layer.handle [as handle_request] (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\route.js:137:13)
    at module.exports (C:\Users\hbhar\Desktop\Basic WebApp\routes\index.js:11:5)
    at Layer.handle [as handle_request] (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\hbhar\Desktop\Basic WebApp\node_modules\express\lib\router\route.js:137:13)

尽管提交表单后路由器成功呈现页面,但我无法将任何数据或日志数据发送到控制台。不幸的是,我无法根据对类似问题的回答来解决问题。先感谢您。此外,对于 HTTP 标头(MDN 除外)的任何资源建议,也值得赞赏。

我的 index.js 文件(在 /routes 中找到):

const express = require('express');
const router = express.Router();

// Welcome Page
router.get('/', (req, res) => res.render('welcome'));

// After Form Submission
router.get('/submitform', function(req, res, next) 
  {
    res.render('submitform');
    next(); 
  }, function(req,res)
  {
    const formsubmission = req.query; 
    res.send(formsubmission);
    console.log(formsubmission);
  }
 );

module.exports = router;

用于运行 npm 的文件(通常称为 app.js):

const express = require('express');
const path = require('path');
const webapp = express();
const expressLayouts = require('express-ejs-layouts');

webapp.use(expressLayouts);
webapp.set('view engine', 'ejs');

// Body Parser Middleware
webapp.use(express.json());
webapp.use(express.urlencoded({ extended: false })); 

// Routing to default directory
webapp.use('/', require('./routes/index'));
// Link folder for static files
webapp.use(express.static(path.join(__dirname, 'public')));

const PORT = process.env.PORT || 3000;
webapp.listen(PORT, () => console.log(`Server started on port ${PORT}`));

标签: javascriptnode.jsformsexpresshttp-headers

解决方案


您可以同时调用res.render('submitform');和调用res.send(formsubmission);相同的请求。您只能对请求做出一个响应。选择其中之一。


推荐阅读