javascript - 表单提交上的另一个“无法设置标题后发送给客户端”
问题描述
当我将文本提交到我的 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}`));
解决方案
您可以同时调用res.render('submitform');
和调用res.send(formsubmission);
相同的请求。您只能对请求做出一个响应。选择其中之一。