我试图在异步库的帮助下在MongoDB中保存数据。当我尝试这样做时,服务器可以正常运行第一个请求,之后开始在每个请求上抛出500:内部服务器错误。此控制台上没有登录日志。 有人可以帮我解决这个问题吗?
routes.js
var listingsHandler = require('../custom/listings-handler');
listingsController.post('/addNew', isLoggedIn, function(req, res, next){
listingsHandler.createNewListing(req, res);
});
../定制/目录-handler.js
"createNewListing": function(req, res){
var deserializedRequestData = jsonHandler.deserializer(req.body, 'data');
deserializedRequestData["_id"] = deserializedRequestData.aliasNameOfListing;
var primaryCategoryOfListing = deserializedRequestData.primaryCategory;
deserializedRequestData["listingNumber"] = 1000000;
async.waterfall([
function(callback){
//The code below calls a module that generate a Mongoose model for me
//which will be used to save the data in the next function.
var Listings = modelEngine.modelGenerators.listings(primaryCategoryOfListing);
callback(null, Listings);
},
function(Listings, callback){
//This function creates a new object from the model named Listings and then
//saves it.
var currentListing = new Listings(deserializedRequestData);
currentListing.save(callback);
}
],
function(err, resp){
if(err){
if(err.code == 11000){
res.send("duplicate");
}else{
res.send("ERRR");
}
}else{
res.send(JSON.stringify(resp));
}
});
上述代码仅适用于第一个请求,并在所有后续请求中抛出500:内部服务器错误。 Node.JS控制台上没有显示任何内容,因此我无法辨别出问题所在。请求每次都是相同的,因此理想情况下它应该被调用多次。
修改1:
modelGenerator.listings()的代码如下
var schemaObject = jsonEngine.categoryDetails.listingsSchema[category];
schemaObject = this.addBasicDetails(schemaObject);
var listingSchema = new mongoose.Schema(schemaObject);
var Listings = mongoose.model("Listings", listingSchema);
return Listings;
注意: jsonEngine.categoryDetails.listingsSchema是为每个类别生成不同架构的函数。 addBasic details是添加更多字段的函数。
答案 0 :(得分:0)
在@BlakesSeven的帮助下,我能够找出问题所在。每次在服务器上收到新请求时,它都会尝试再次重新编译列表模型。由于Mongoose中的模型要编译一次,然后在所有请求中全局使用,因此会发生此错误。
对每个单独的函数使用try catch有很大帮助。