mongoose - app.js中单个数据库连接的问题

时间:2017-09-17 05:43:34

标签: javascript node.js mongodb mongoose

在我的app.js中,我在服务器启动时打开数据库连接,因为在每个请求中打开和关闭数据库连接都不是一个好习惯。

我注意到的是每当我触发后api调用时,它都会覆盖第一个文档,而不是将新文档添加到集合中

如果我在api调用之前打开一个集合并在api调用之后将其关闭,那么新文档将被添加到集合中,并且一切正常工作。

这是预期的行为吗?如果我们在每次api呼叫时连接和断开数据库会产生什么影响?如果不建议在每个请求上打开数据库连接,我该如何添加新文件?收藏?

控制器 -

var holidaySchema = new holidayModel();
module.exports.createHolidayPackage = function (req, res) {
    new Promise(function (resolve, reject) {

        holidayModel.findOne({
            "packageShortName": req.body['packageShortName'], "tourOperator": req.body['tourOperator']
        }, function (err, doc) {
            if (doc != null) {
                logger.warn("Holiday package " + req.body['packageShortName'] + " already exists in database");
                return reject(res.status(409).json({ "Message": "Holiday package " + req.body['packageShortName']  + " already exists in database" }));
            } else {
                counterSchema.getNext('holidayPackageId', collection, function (id) {
                    holidayPackageId = id;
                    resolve(holidayPackageId);
                    console.log("holidayPackageId 1 " + holidayPackageId)
                })
            }
        })
    }).then(function (holidayPackageId) {
        //code

    }).then(function () {

        holidaySchema.save(function (error) {
            if (error) {
                logger.error("Error while inserting record in holiday collection: - " + error.message)
                return res.status(500).json({ "Message": error.message.trim() });
            }
            else {
                return res.json({ "Message": "Data got inserted successfully in holiday collection" });
            }
        })

    })
    .catch(function (err) {
        return res.json({ "Message": err.message });
    });

}

1 个答案:

答案 0 :(得分:0)

holidaySchema文档是在请求上下文之外创建的,这使它成为一种全局文档。换句话说,它将被重新用于每个请求,并且一旦文档被保存到数据库一次,当您再次保存它时,Mongoose将更新数据库中的现有文档,而不是创建一个新的。

解决方案是在请求循环中创建文档 ,所以在这种情况下,在createHolidayPackage函数内部:

module.exports.createHolidayPackage = function (req, res) {
  var holidaySchema = new holidayModel();
  ...