【发布时间】:2017-01-06 01:36:44
【问题描述】:
我是 nodejs/expressjs 和 mongodb 的新手。我正在尝试创建一个 API,将数据公开给我尝试使用 Ionic 框架构建的移动应用程序。
我有这样的路线设置
router.get('/api/jobs', (req, res) => {
JobModel.getAllJobsAsync().then((jobs) => res.json(jobs)); //IS THIS THe CORRECT WAY?
});
我的模型中有一个从 Mongodb 读取数据的函数。我正在使用 Bluebird Promise 库将我的模型函数转换为返回 Promise。
const JobModel = Promise.promisifyAll(require('../models/Job'));
我在模型中的功能
static getAllJobs(cb) {
MongoClient.connectAsync(utils.getConnectionString()).then((db) => {
const jobs = db.collection('jobs');
jobs.find().toArray((err, jobs) => {
if(err) {
return cb(err);
}
return cb(null, jobs);
});
});
}
promisifyAll(myModule) 将此函数转换为返回一个 Promise。
我不确定的是,
- 如果这是从我的模型将数据返回到路由回调函数的正确方法?
- 这样有效吗?
- 使用 promisifyAll 很慢?因为它循环遍历模块中的所有函数并创建一个以 Async 作为后缀的函数副本,该副本现在返回一个 Promise。它什么时候真正运行?这是一个与节点要求语句相关的更通用的问题。请参阅下一点。
- 所有 require 语句何时运行?当我启动 nodejs 服务器时?或者当我调用 api 时?
【问题讨论】:
-
看看猫鼬模块。
-
@Yahya 我研究过它。但我不想在我的文档上强制执行模式。
-
Monk 呢?
-
@Yahya - 我确实尝试过使用 mongojs。但是这些库并没有真正提供作为本机 mongod 的最新可用特性/功能,所以我正在尝试使用本机 mongod。
标签: node.js mongodb api express bluebird