【发布时间】:2017-03-31 07:32:14
【问题描述】:
我正在为一个经济系从事大学项目。我有很多路线可以正常工作,但只有这一条给我带来了很大的问题。
每当这条路线完成并发送响应时,我都会收到以下错误:
Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11)
at ServerResponse.header (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/node_modules/express/lib/response.js:719:10)
at ServerResponse.send (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/node_modules/express/lib/response.js:164:12)
at ServerResponse.json (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/node_modules/express/lib/response.js:250:15)
at /Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/controllers/application.js:171:56
at Query._callback (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/models/application.js:141:25)
at Query.Sequence.end (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/node_modules/mysql/lib/protocol/sequences/Sequence.js:85:24)
at Query._handleFinalResultPacket (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
at Query.OkPacket (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/node_modules/mysql/lib/protocol/sequences/Query.js:78:10)
at Protocol._parsePacket (/Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/node_modules/mysql/lib/protocol/Protocol.js:280:23)
以下是该路由调用的函数:
registerFactory: function (req, res ) {
var userDetails = req.user;
var requestData = req.body;
var hscode = "NULL";
var applicationID = "FR";
var applicationType = "Factory";
var factoryId = "";
if (userDetails.usergroup == "Client") {
var d = new Date();
var year = d.getFullYear();
applicationID = applicationID + year;
var dnum = 5;
var num = 0;
applicationModel.getLastAppID(applicationType, function (err, results) {
if (err) {
return res.json({success: false, message: 'Database Error. '});
}else{
num = results[0].LastID;
console.log(num);
dnum = dnum - num.toString().length;
while (dnum != 0) {
applicationID = applicationID + "0";
dnum = dnum - 1;
}
applicationID = applicationID + num;
num = num + 1;
applicationModel.updateLastAppID(num, applicationType, function (err) {
if (err) {
return res.json({success: false, message: 'Database Error. '});
}else{
factoryController.registerFactory(userDetails,requestData, function (err,FID) {
if (err) {
return res.json({success: false, message: 'Database Error. '});
}else{
factoryId = FID;
applicationModel.createFactoryRegApplication(userDetails, requestData, applicationType, applicationID,hscode, function (err) {
if (err) {
return res.json({success: false, message: 'Database Error. '});
} else {
res.json({
success: true,
message: 'Application Created',
data: {RequestID: applicationID,
FactoryID : factoryId
}
});
}
});
}
});
}
});
}
});
} else {
return res.json({success: false, message: 'unauthorized Access'});
}
}
我不知道为什么会发生这种情况,即使 res.json 从未被调用两次。
【问题讨论】:
-
at /Users/Nasseralwan/Documents/CustExumpSDP/CustomExemptionSystem/controllers/application.js:171:56你的代码是哪一行? -
这个 :res.json({ success: true, message: 'Application Created', data: {RequestID: applicationID, FactoryID : factoryId }
-
你在这段代码后面会调用
res.end()吗? -
不,我没有调用 res.end()
标签: javascript json node.js express