我如何使用`Q`与猫鼬绑定`save`方法

     2023-03-11     77

关键词:

【中文标题】我如何使用`Q`与猫鼬绑定`save`方法【英文标题】:How could I bind `save` method using `Q` with mongoose 【发布时间】:2014-07-04 18:31:27 【问题描述】:

说我在User.js中有以下架构

var mongoose = require('mongoose');
var Q = require('q');

var userSchema = new mongoose.Schema(
  phone: 
    type: Number,
    require: true,
    index: 
      unique: true
    
  
);
module.exports = mongoose.model('User', userSchema);
module.exports.findOne = Q.nfbind(module.exports.findOne.bind(module.exports));
module.exports.find = Q.nfbind(module.exports.find.bind(module.exports));

还有另一个文件testuser.js

var mongoose = require('mongoose');
var Q = require('q');
var User = require('../User');

var connectionStr = "mongodb://localhost:27017/user-model-test";
mongoose.connect(connectionStr, function(error) 
  if (error) 
    throw(error);
  
  console.log("Connect to MongoDB...");
  var testuser = new User(
    phone: 1008611,
  );
  testuser.save = Q.nfbind(testuser.save.bind(testuser));
  testuser.save().then(function () 
    return User.findOne( phone: 1008611 ).then(function (user) 
      console.log(user.phone);
      mongoose.disconnect();
    , function (error) 
      throw(error);
    );
  , function (error) 
    throw(error);
  ).done();
);

请注意,目前我使用testuser.save = Q.nfbind(testuser.save.bind(testuser)); 绑定save,但我想在User.js 中进行绑定,例如module.exports.find = Q.nfbind(module.exports.find.bind(module.exports));,有什么办法可以做到吗?

谢谢。

【问题讨论】:

【参考方案1】:

如果你坚持 Q,我会这样做:

User.create = function(data)
    var u = new User(data);
    u.save = Q.nfbind(testuser.save.bind(testuser));
    // add other methods you want
    return u;
;

但是,我想补充一点,如果您对所有其他 Mongoose 方法调用 .exec(),它们已经返回了一个承诺(所以 .find(..).exec() 返回一个 mpromise 承诺)。也就是说,Mongoose 已经提供了一个 Promise API,save 是目前唯一没有包含的方法之一and there are plans to include it。

知道这与 Bluebird 成为一个单一的衬里也是有益的,Bluebird 有一个 promisifyAll 函数,可以创建更容易调试并且比 Qs 或 Mongoose 更快的 Promise。

【讨论】:

NestJS 与猫鼬模式、接口和 dto 方法问题

】NestJS与猫鼬模式、接口和dto方法问题【英文标题】:NestJSwithmongooseschema,interfaceanddtoapproachquestion【发布时间】:2020-08-0315:57:10【问题描述】:我是nestJS和mongoDB的新手,我不清楚为什么我们需要为要保存在mongoDB中的每个集合声... 查看详情

将模糊搜索与猫鼬一起使用时出现打字稿错误

】将模糊搜索与猫鼬一起使用时出现打字稿错误【英文标题】:TypescripterrorwhenusingfuzzySearchwithmongoose【发布时间】:2020-07-0905:26:05【问题描述】:在我的猫鼬模式中,我使用如下库:https://github.com/VassilisPallas/mongoose-fuzzy-searchingUse... 查看详情

将模糊搜索与猫鼬一起使用时出现打字稿错误

】将模糊搜索与猫鼬一起使用时出现打字稿错误【英文标题】:TypescripterrorwhenusingfuzzySearchwithmongoose【发布时间】:2020-07-0905:26:05【问题描述】:在我的猫鼬模式中,我使用如下库:https://github.com/VassilisPallas/mongoose-fuzzy-searchingUse... 查看详情

什么是易于使用的控制流库或模块,可与猫鼬和节点一起使用 [关闭]

】什么是易于使用的控制流库或模块,可与猫鼬和节点一起使用[关闭]【英文标题】:Whatisaneasytousecontrolflowlibraryormoduletousewithmongooseandnode[closed]【发布时间】:2011-12-1622:11:38【问题描述】:我正在查看async和step,但在进行数据库... 查看详情

将 TypeScript 枚举与猫鼬模式一起使用

】将TypeScript枚举与猫鼬模式一起使用【英文标题】:UsingTypeScriptenumwithmongooseschema【发布时间】:2017-11-0114:52:12【问题描述】:我有一个带有枚举的架构:exportinterfaceIGameMapModelextendsIGameMap,DocumentexportconstgameMapSchema:Schema=newSchema(nam... 查看详情

将 TypeScript 枚举与猫鼬模式一起使用

】将TypeScript枚举与猫鼬模式一起使用【英文标题】:UsingTypeScriptenumwithmongooseschema【发布时间】:2017-11-0114:52:12【问题描述】:我有一个带有枚举的架构:exportinterfaceIGameMapModelextendsIGameMap,DocumentexportconstgameMapSchema:Schema=newSchema(nam... 查看详情

Expressjs 与猫鼬。并在子文档中获取外键子文档

...documents【发布时间】:2018-06-0108:13:00【问题描述】:我有使用外键与国家相关的国家。在获取国家时,我无法获得相关国家,但得到一个奇怪的结果。以下是我的模型国家模式var猫鼬=要求(\'猫鼬\');varSchema=m 查看详情

Expressjs 与猫鼬。并在子文档中获取外键子文档

...documents【发布时间】:2018-06-0108:13:00【问题描述】:我有使用外键与国家相关的国家。在获取国家时,我无法获得相关国家,但得到一个奇怪的结果。以下是我的模型国家模式var猫鼬=要求(\'猫鼬\');varSchema=m 查看详情

猫鼬批量保存承诺

...【发布时间】:2013-06-2906:42:04【问题描述】:我正在探索使用q而不是async-然后我遇到了这里解决的问题:MongooseJSpromises?Orhowtomanagebatchsave如果我使用q,这个答案会是什么?【问题讨论】:【参考方案1】:请参阅@rquinn的帖子,如... 查看详情

我应该如何与摩卡和猫鼬一起使用?

】我应该如何与摩卡和猫鼬一起使用?【英文标题】:howdoiuseshouldwithmochaandmongoose?【发布时间】:2012-10-3012:14:44【问题描述】:我在运行测试时在save()方法中不断收到错误。varUser=require(\'../../models/user\'),should=require(\'should\');descri... 查看详情

mongodb与猫鼬的一对一关系

】mongodb与猫鼬的一对一关系【英文标题】:Onetoonerelationshipsinmongodbwithmongoose【发布时间】:2022-01-1401:22:19【问题描述】:我有2个名为“用户”和“链接”的数据库。每当有新用户注册时,都会在具有唯一ID的用户中创建一个集... 查看详情

为不同数据类型的相同操作重复代码,Express(nodejs) 应用程序与猫鼬

...04-1607:05:19【问题描述】:我正在创建一个ExpressrestAPI,它使用mongoose连接到MongoDB。该数据库有几种不同的数据类型:Us 查看详情

如何在猫鼬的 document.save() 回调中隐藏字段?

】如何在猫鼬的document.save()回调中隐藏字段?【英文标题】:Howtohideafieldinthecallbackofdocument.save()inmongoose?【发布时间】:2019-09-0520:34:20【问题描述】:我想在创建用户后显示用户的数据,使用以下代码在异步函数中返回用户:cons... 查看详情

无法将猫鼬虚拟与打字稿一起使用

...布时间】:2021-09-2722:58:51【问题描述】:我正在尝试学习如何将虚拟机与猫鼬和打字稿一起使用。假设我有一个用户界面。interfaceUserid:mongoose.ObjectId;name:string;likes:string;然后我为猫鼬创建一个模式。//createthemodelc 查看详情

无法将猫鼬虚拟与打字稿一起使用

...布时间】:2021-09-2722:58:51【问题描述】:我正在尝试学习如何将虚拟机与猫鼬和打字稿一起使用。假设我有一个用户界面。interfaceUserid:mongoose.ObjectId;name:string;likes:string;然后我为猫鼬创建一个模式。//createthemodelc 查看详情

快递+猫鼬登录

...目(与猫鼬)。到目前为止一切正常,现在我的问题是:如何确保我的用户已连接?我 查看详情

快递+猫鼬登录

...目(与猫鼬)。到目前为止一切正常,现在我的问题是:如何确保我的用户已连接?我 查看详情

猫鼬保存()不返回承诺

...题描述】:Mongoose的文档确认方法save返回一个承诺。我想使用这种方法在我的数据库中保存一个用户模型。我就是这样做的:save(user)user.save((err,user)=>if(err)returnhandleError(err);elseconsole 查看详情