我是 Node.js 编码的新手,我通过 mongoose 创建了一个数据库连接,然后将数据库对象导出到我的主 app.js 文件中:
// db.js
var mongoose = require("mongoose");
var uri = /*The URL*/;
var db = mongoose.connect(uri, {
useMongoClient: true
});
exports.db = db;
在这里,我尝试使用该数据库连接来执行 CRUD 操作:
// app.js
var db = require('./db');
app.post('/', function (req, res) {
db.collection(/* … */); // throws error
});
错误是:
类型错误:db.collection 不是函数
我认为这是因为connect
in的调用db.js
是异步的,而require
inapp.js
是同步的——所以当我执行时它会是未定义的db.collection
??如何使用 Mongoose 来避免此错误?
目标:我希望能够db.collection.insertOne()
在我的app.js
我发现了一个有点相关的主题,但它不使用 Mongoose,所以我对如何解决这个问题感到困惑:如何导出仅在异步回调中可用的对象?
回答我自己的问题:
它需要一个 mongoose 模型在app.js
. 因此,我最终将 CRUD 操作路由到控制器文件中定义的函数,而不是db.collection
在 mainapp.js
中进行。
//app.js
var app = express();
var router = express.Router();
app.use(router);
require("./Routes")(router);
router.get("/xxx", xxx.get);
以下是路线:
//routes.js - takes care of routing URLs to the functions
var XXX = require('../xxx');
module.exports = function(router){
router.get('/XXX', XXX.get)
};
这是实际的功能:
//xxx.js - functions defined here
exports.get = function (req, res) {
XXX.getAll(req.body, function(err, result){
if (!err) {
return res.send(result); // Posting all the XXX
} else {
return res.send(err); // 500 error
}
});
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句