当前位置: 首页 > 面试题库 >

如何在Node.js / Express应用程序的Mongoose预钩中进行查询?

尚嘉庆
2023-03-14
问题内容

我正在使用带有Mongoose ORM的MongoDB在Node.js / Express中构建一个基本博客。

我有一个预“保存”钩子,可以用来为我自动生成一个博客/想法。除在我要查询的部分之前,我想查询一下是否有其他现有的帖子,然后再继续操作,这一切都很好。

但是,似乎this无法访问.find或.findOne(),因此我不断收到错误消息。

解决此问题的最佳方法是什么?

  IdeaSchema.pre('save', function(next) {
    var idea = this;

    function generate_slug(text) {
      return text.toLowerCase().replace(/[^\w ]+/g,'').replace(/ +/g,'-').trim();
    };

    idea.slug = generate_slug(idea.title);

    // this has no method 'find'
    this.findOne({slug: idea.slug}, function(err, doc) {
      console.log(err);
      console.log(doc);
    });

    //console.log(idea);
    next();
  });

问题答案:

不幸的是,它的文档不是很好(在Document.js
API文档中
没有提及),但是文档可以通过该constructor字段访问其模型-我一直在使用它来记录插件中的内容,这使我可以访问他们所依附的模型。

module.exports = function readonly(schema, options) {
    schema.pre('save', function(next) {
        console.log(this.constructor.modelName + " is running the pre-save hook.");

        // some other code here ...

        next();
    });
});

对于您的情况,您应该能够:

IdeaSchema.pre('save', function(next) {
    var idea = this;

    function generate_slug(text) {
        return text.toLowerCase().replace(/[^\w ]+/g,'').replace(/ +/g,'-').trim();
    };

    idea.slug = generate_slug(idea.title);

    // this now works
    this.constructor.findOne({slug: idea.slug}, function(err, doc) {
        console.log(err);
        console.log(doc);
        next(err, doc);
    });

    //console.log(idea);
});


 类似资料:
  • 问题内容: 我已经通过使用nodejs + express制作了简单的nodejs应用程序。现在,我要进行用户身份验证。我想通过使用猫鼬来实现会话处理。你能举个例子吗? 问题答案: 一些有用的链接: 如何在node.js中实现登录身份验证 在node.js和mongodb中创建注册和登录表单 另外,会话管理不是由Mongoose完成,而是由connect-mongodb或connect- redi

  • 问题内容: 我正在用Node.js和猫鼬编写一个Webapp。如何对通话结果进行分页?我想要一个与SQL 相当的功能。 问题答案: 在通过Rodolphe提供的信息仔细研究了Mongoose API之后,我想出了以下解决方案:

  • 问题内容: —我构建了一个简单的应用程序,该应用程序从Redis数据库中提取数据(50个项目)并将其扔到localhost。我做了一个ApacheBench(c = 100,n = 50000),并且在1.73GHz(我的6岁笔记本电脑)的双核T2080上获得了半不错的150个请求/秒,但是proc的使用非常令人失望显示: 仅使用了一个内核,这是按照Node中的设计进行的,但是我认为,如果我可以使

  • 我在PhpStorm中有一个node.js项目,当我单击Run命令时,它可以很好地运行文件,但现在我需要使用URL中的查询字符串(例如)来运行该项目,并使用Express中的来获取查询字符串参数。问题是我是PhpStorm的新手,不知道如何使用URL中的参数运行脚本。 到目前为止,我只看到运行文件的选项,而没有看到运行的选项。通常情况下,我只需要在浏览器中加载脚本,但这会使使用无头浏览器的目的落空

  • 问题内容: 我已经在node.js的快速框架上编写了REST API,该API可以处理来自Chrome中的js控制台的请求以及URL栏等。现在,我正尝试使其针对来自另一个应用程序的请求工作,域(CORS)。 由javascript前端自动发出的第一个请求是对/ api / search?uri =的,并且似乎在“预检” OPTIONS请求上失败。 在我的快速应用中,我使用以下命令添加了CORS标头

  • 问题内容: 我是Node.js编程的新手,我最近使用mongoDB创建了一个示例工作Web应用程序(express,bone和其他免费视图技术)。现在,我正要在暂存环境中部署该应用程序,但我不确定如何打包此应用程序并将其分发。[我可以照顾mongoDb并单独进行设置] 我来自Java世界,在那里我们为可重用的libs创建了jars,并为servlet容器中部署的Web应用程序创建了war / ea