Node.js 不断得到错误:Can';t在发送邮件后设置邮件头
因此,我正在尝试更新代码,并将其显示给用户。基本上,它能够做我需要做的事情,但在执行之后,我得到了这个错误 C:\Users\tester01\u 2\myproject\node\u modules\mongodb core\lib\cursor.js:174 犯错误; ^ 错误:发送邮件后无法设置邮件头。 在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:357:11) 在ServerResponse.header( C:\Users\tester01\u 2\myproject\node\u modules\express\lib\response.js:725:10) 在ServerResponse.send (C:\Users\tester01\u 2\myproject\node\u modules\express\lib\response.js:170:12) 在C:\Users\tester01\u 2\myproject\dbUpdate.js:13:14 在C:\Users\tester01\u 2\myproject\dbUpdate.js:28:5 在handleCallback(C:\Users\tester01\u 2\myproject\node\u modules\mongodb- core\lib\cursor.js:171:5) 在下一个功能中(C:\Users\tester01\u 2\myproject\node\u modules\mongodb- core\lib\cursor.js:682:5) at Cursor.next[作为_next] (C:\Users\tester01\u 2\myproject\node\u modules\mongodb- core\lib\cursor.js:692:3) at环路 (C:\Users\tester01\u 2\myproject\node\u modules\mongodb\lib\cursor.js:694:8) 每个 (C:\Users\tester01\u 2\myproject\node\u modules\mongodb\lib\cursor.js:741:16) 这是我的代码Node.js 不断得到错误:Can';t在发送邮件后设置邮件头,node.js,mongodb,Node.js,Mongodb,因此,我正在尝试更新代码,并将其显示给用户。基本上,它能够做我需要做的事情,但在执行之后,我得到了这个错误 C:\Users\tester01\u 2\myproject\node\u modules\mongodb core\lib\cursor.js:174 犯错误; ^ 错误:发送邮件后无法设置邮件头。 在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:357:11) 在ServerResponse.header( C:
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://localhost:27017/myproject';
module.exports = {
postCollection : function(req, res){
var issueQty = req.body.issueQty;
var itemDescrip = req.body.itemDescrip;
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
updateRecord(db, req, function(doc) {
return res.send('Record Found. Now updating this document...' +
itemDescrip + ' Record Updated. This is the new record ' + doc )
res.end();
db.close();
});
});
}
}
var updateRecord = function(db, req, callback) {
var cursor = db.collection('documents').find({'Item Description':
req.body.itemDescrip, 'Issued QTY': req.body.issueQty})
cursor.each(function(err,doc){
assert.equal(err, null);
if(doc != err){
console.log('Successfully queried');
console.log(doc);
callback(JSON.stringify(doc));
} else{
throw err;
}
});
db.collection('documents').updateMany(
{ 'Item Description': req.body.itemDescrip},
{
$set: { 'Issued QTY': req.body.issueQty }
},function(err, results) {
console.log(results);
console.log('Done');
console.log(results);
});
};
我认为这与我的res有关,因为我看到的所有res线程都处于错误的位置,但我需要将我的
res.send
放在那里,以便它可以使用doc
。有没有办法解决这个问题?谢谢 首先,您应该删除res.send()前面的return
其次,在updateRecord
函数中,不应在循环中调用回调
函数,它将执行多次。然后在执行updateMany
之前关闭数据库
如果要发送文档,应该使用临时数组保存文档,并在完成updateRecord中的所有逻辑后将其传递给res
如果我理解正确,以下是我对您代码的修改
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/myproject';
var updateRecord = function(db, req, callback) {
db.collection('documents').updateMany({ 'Item Description': req.body.itemDescrip }, {
$set: { 'Issued QTY': req.body.issueQty }
}, function(err, results) {
if (err) return callback(err);
console.log('Done');
console.log(results);
var cursor = db.collection('documents').find({
'Item Description': req.body.itemDescrip,
'Issued QTY': req.body.issueQty
});
var temp = [];
cursor.each(function(err, doc) {
if (err) {
return callback(err);
}
console.log('Successfully queried');
console.log(doc);
temp.push(JSON.stringify(doc));
});
callback(null, temp);
});
};
module.exports = {
postCollection: function(req, res) {
var issueQty = req.body.issueQty;
var itemDescrip = req.body.itemDescrip;
MongoClient.connect(url, function(err, db) {
if(err) {
res.send(err);
res.end();
db.close();
return;
}
updateRecord(db, req, function(err, docs) {
if(err){
res.send(err);
}
else{
res.send(docs);
}
res.end();
db.close();
});
});
}
}
@OngKongTat我更新了我的答案,你应该检查你的updateRecord函数两次。对不起,我没有真正理解你所说的循环,你是指函数还是for/while循环等?因为我有点困惑,你怎么知道什么时候放db.close()。@OngKongTat cursor.each是一个循环,你的回调函数在updateMany之前被调用,因此,在调用updateMany之前调用db.close。我无法将带有doc的临时数组传递给res,因为doc将是未定义的,因为doc是在另一个函数中的函数中声明的,所以我不知道应该如何调整该函数,以便doc能够在后收集中使用。@OngKongTat我已更新我的回答,你可以看看我是否理解正确。