在我的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 });
});
}
答案 0 :(得分:0)
holidaySchema
文档是在请求上下文之外创建的,这使它成为一种全局文档。换句话说,它将被重新用于每个请求,并且一旦文档被保存到数据库一次,当您再次保存它时,Mongoose将更新数据库中的现有文档,而不是创建一个新的。
解决方案是在请求循环中创建文档 ,所以在这种情况下,在createHolidayPackage
函数内部:
module.exports.createHolidayPackage = function (req, res) {
var holidaySchema = new holidayModel();
...