我目前正在创建一个使用Sencha Ext JS作为前端部分的应用程序和Node JS来处理来自MongoDB的用户请求和数据检索
当我尝试将数据插入mongoDB时。 Ext JS通过ajax发送请求。它插入成功,但我再次插入。它会插入第二个请求两次。
这是我的server.js的片段
Server.js
var express = require('express')
var app = express()
var form = require('formidable')
var document = require('/models/Document.js')
var db = .... //connection to my mongodb instance
app.post('/insertDocument', function(req, res){
document.insertDocument(req, form, db, function(info){
return res.end(info)
});
});
我使用res.end进行发布请求,因为当我发送第二个请求时使用res.send或res.json时,它会给我一个错误。发送后不能发送标题。
Document.js
module.exports = {
insertDocument: function(req, form, db, callback){
var collection = db.collection('HD_Documents');
form.parse(req, function(err, fields, files){
collection.insert({
name: fields.name,
.
.
.
.
},function(er, info){
if(er){
callback("{'success':false}");
}else{
callback("{'success':true}")
}
})
})
}
}
就像我说它正确插入一样。但在第二次插入请求。它插入数据两次。我检查了chrome开发人员工具中的网络选项卡。我看到客户端只发送一个请求。但是节点js服务器会对它进行两次处理。
我不知道为什么。我需要帮助。 我以为使用res.send或res.json会解决问题,但就像我说它给我一个错误。
任何帮助将不胜感激。 :)
修改 事实证明,两次处理的函数是强大的form.parse。 我不知道为什么它仍然被叫两次
答案 0 :(得分:0)
在最后一行回调中只需要一个res.end() 您的代码应如下所示:
module.exports = function foo(req, res) {
insertDocument: function(req, form, db, callback){
var collection = db.collection('HD_Documents');
form.parse(req, function(err, fields, files){
collection.insert({
name: fields.name,
.
.
.
.
},function(er, info){
if(er){
callback("{'success':false}");
}else{
callback("{'success':true}")
}
})
res.end()
})
}
}