Node.js util Promisify Mongoose 方法

标签 node.js mongodb mongoose es6-promise

我在尝试 promise Mongoose 方法时遇到了阻碍。 据我的理解,我应该能够 promise fn 接受带有错误和参数的回调,但在这种情况下我收到此错误:

TypeError: this.Query is not a constructor

型号代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema; 
module.exports = mongoose.model('User', new Schema({ 
    name: String, 
    password: String, 
    admin: Boolean 
}));

破解代码:

var User = require('./app/models/user');
var { promisify } = require('util');
var findUserPromise = promisify(User.findOne);

...

    findUserPromise({ name: req.body.name })
    .then(user => console.log("do something with the user"))
    .catch(err => { console.log("err ", err) });

非常感谢任何帮助!

最佳答案

mongoose 已经非常 promise 友好了。要从 findOne() 获得 promise ,您只需调用 .exec():

而不是

var findUserPromise = promisify(User.findOne);
...

findUserPromise({ name: req.body.name })
    .then(user =>
...

只需使用.exec()调用即可 :

User.findOne({ name: req.body.name }).exec()
    .then(user =>
...

关于Node.js util Promisify Mongoose 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53552236/

相关文章:

javascript - Paper.js 服务器端无法使用接收到的图层

mongodb - 从另一个集合中删除 dbref 元素

javascript - Jest 测试 Mongoose 模型实例化

javascript - 向数据库添加登录字段?

node.js - 类型错误 : userDetails. findAll 不是函数

mongodb - 如何检查数据库(mongodb)中是否存在用户名和密码

javascript - 将视频从 HTML5 流式传输到 node.js

node.js - 如何让一段代码同步工作

node.js - VSCode : Prettier does not work with Dart Flutter

MongoDB 不使用简单查询的不同索引