第一个请求节点js后出现500内部错误

时间:2015-10-08 09:16:50

标签: node.js mongodb mongoose

我试图在异步库的帮助下在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.categoryDe​​tails.listingsSchema是为每个类别生成不同架构的函数。 addBasic details是添加更多字段的函数。

1 个答案:

答案 0 :(得分:0)

在@BlakesSeven的帮助下,我能够找出问题所在。每次在服务器上收到新请求时,它都会尝试再次重新编译列表模型。由于Mongoose中的模型要编译一次,然后在所有请求中全局使用,因此会发生此错误。

对每个单独的函数使用try catch有很大帮助。