如何解决为什么我收到“错误:发送后无法设置标题”?
当 API POST 被 JSON 数据命中时,我试图将数据写入 MS sql 服务器。
var express = require('express');
var app = express();
var sql = require('mssql');
// Connection string parameters.
var sqlConfig = {
user: 'sa',password: 'Forward@123',server: '115.187.45.88',database: 'Example',requestTimeout: 1000,options: {
"encrypt": false,"enableArithAbort": true
}
}
// Start server and listen on http://localhost:8080/
var server = app.listen(8080,function () {
var host = server.address().address
var port = server.address().port
console.log("app listening at http://%s:%s/SendData",host,port)
});
app.use(
express.urlencoded({
extended: true
})
)
app.use(express.json())
app.post('/SendData',function (req,res) {
let data = '';
req.on('data',chunk => {
data += chunk;
})
req.on('end',() => {
var obj=JSON.parse(data);
for(var i=0;i<obj.length;i++){
console.log(obj[i]);
//write in db
var sqlString="INSERT INTO [dbo].[EmpTable] ([id],[fname],[lname]) VALUES ("+obj[i].id+",'"+obj[i].fname+"','"+obj[i].lname+"')";
console.log("sqlString ----- "+sqlString);
executeQuery(res,sqlString);
}
})
res.setHeader('Access-Control-Allow-Origin','*');
return res.status(200).json({"Message":"Success!!!"});
});
var executeQuery = function(res,query){
sql.connect(sqlConfig,function(err){
if(err){
console.log("there is a database connection error -> "+err);
res.send(err);
}
else{
// create request object
var request = new sql.Request();
// query to the database
request.query(query,function(err,result){
if(err){
console.log("error while querying database -> "+err);
res.send(err);
}
else{
res.send(result);
sql.close();
}
});
}
});
}
我收到以下错误:
_http_outgoing.js:491 throw new Error('发送后无法设置标题。');
错误:发送后无法设置标头。 在 validateHeader (_http_outgoing.js:491:11) 在 ServerResponse.setHeader (_http_outgoing.js:498:3) 在 ServerResponse.header (E:\Node Workspace\node-post-api\node_modules\express\lib\response.js:771:10) 在 ServerResponse.send (E:\Node Workspace\node-post-api\node_modules\express\lib\response.js:170:12) 在 ServerResponse.json (E:\Node Workspace\node-post-api\node_modules\express\lib\response.js:267:15) 在 ServerResponse.send (E:\Node Workspace\node-post-api\node_modules\express\lib\response.js:158:21) 在 E:\Node Workspace\node-post-api\post-api-db-write.js:80:25 在 _query (E:\Node Workspace\node-post-api\node_modules\mssql\lib\base\request.js:420:9) 在 Request.tds.Request.err [as userCallback] (E:\Node Workspace\node-post-api\node_modules\mssql\lib\tedious\request.js:479:15) 在 Request.callback (E:\Node Workspace\node-post-api\node_modules\tedious\lib\request.js:56:14)
解决方法
当消息发布到 /SendData
时,您说:
res.setHeader('Access-Control-Allow-Origin','*');
return res.status(200).json({"Message":"Success!!!"});
这会发送您可以对请求做出的唯一响应。
您还调用executeQuery(res,sqlString)
,其中您:
res.send(result);
那个也发送您可以对请求做出的唯一响应。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。