我不知道在发送到客户机之后如何设置头文件?
代码:
在表单提交过程中,会发出post-ajax请求,响应是返回到客户机的JSON对象。
我被注释掉了大部分代码以找出原因,
此时,在发出post请求后,我只执行一个res.json()。
. 我不明白我在什么时候重新设置报头/或返回两次响应?
但我得到了这个错误:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:470:11)
at ServerResponse.header (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/express/lib/response.js:170:12)
at done (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/express/lib/response.js:1004:10)
at Object.exports.renderFile (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/pug/lib/index.js:412:12)
at View.exports.__express [as engine] (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/pug/lib/index.js:455:11)
at View.render (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/express/lib/view.js:135:8)
at tryRender (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/express/lib/application.js:640:10)
at Function.render (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/express/lib/application.js:592:3)
at ServerResponse.render (/home/shahyan/Videos/FrontendProject-masters/notes-js/beginner/js-fundamentals-functional/todoApp/node_modules/express/lib/response.js:1008:7)
索引文件
var express = require('express');
var router = express.Router();
let users = [];
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/', function(req, res, next) {
if(req.body.fname && req.body.list_name && req.body.list_date) {
addNewUser(req.body);
res.json({
"message":"Successfully signed up!",
"userName": req.body.fname,
"userDate": req.body.list_date
});
}
console.log(body.req);
});
module.exports = router;
function addNewUser(data) {
try {
users.push(
{
"fname":data.fname,
"list_name": data.list_name,
"list_date": data.list_date
}
);
} catch(e) {
console.log("Failed to add user ", e);
throw e;
}
}
myscript.js——前端客户端客户端
document.getElementById("createNewList").addEventListener('submit', function(e) {
e.preventDefault();
let form_data = formSerialize(document.getElementById("createNewList"));
fetch('/', {
method: 'POST',
headers: {
"Content-Type": "application/json; charset=utf-8",
},
body: form_data
})
.then(function(response) {
if(response.ok)
return response.json();
})
.then(function(user_json) {
console.log(user_json);
console.log(user_json);
create_todays_todo_list(user_json);
});
});
function formSerialize(form) {
var input = form.getElementsByTagName("input");
var formData = {};
for (var i = 0; i < input.length; i++) {
formData[input[i].name] = input[i].value;
}
return formData = JSON.stringify(formData);
}
function create_todays_todo_list(user_json) {
document.getElementById("createNewList").style.display="none";
document.getElementById("toDoList").style.display="flex";
document.getElementById("user_name_heading").innerHTML = user_json.userName;
document.getElementById("user_date_signup_heading").innerHTML = user_json.userDate;
}