我目前正在创建一个应用程序,它使用Sencha作为前端部分和Node来处理用户请求和从MongoDB获取数据
当我试图将数据插入到mongoDB时。Ext通过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作为post请求,因为当我使用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 developer tools中检查了网络选项卡。我看到客户只发送了一个请求。但是节点js服务器处理它两次。
我不知道为什么。拜托我需要帮助。我认为使用res.send或res.json可以解决这个问题,但就像我说的那样,它给了我一个错误。
任何帮助都将不胜感激。:)
编辑原来是经过两次处理的form.parse的强大。我不知道为什么还叫两次
发布于 2020-01-02 02:54:40
您只需要在最后一行回调中使用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()
})
}
}
https://stackoverflow.com/questions/42905281
复制