首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NodeJS和MongooseJS:从验证器中的回调访问值

NodeJS和MongooseJS:从验证器中的回调访问值
EN

Stack Overflow用户
提问于 2013-09-29 15:54:39
回答 2查看 310关注 0票数 0

我试图在NodeJS/express‘s/MongoDB/Mongoose应用程序中使用验证器和快速验证器来确认用户没有使用已经注册的电子邮件地址。我已经在电子邮件字段上有了一个独特的索引,但我想做的是使用一种方法将所有的验证都保存在一个地方。因此,我的问题:使用快速验证器验证唯一性。

我已经创建了模式方法来查找电子邮件地址,并且它正在工作。我已经创建了自定义验证器,并将其连接到控制器中。它也在起作用。我的问题是,我不知道如何与控制器中的验证器通信来自回调的模式方法的结果。

user.js (模型)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...

/**
 * Check for email addresses already in the collection
 */
 checkEmailDupes: function(req, cb) {
   this.model('User').findOne({email: req}, function (err, user) {
     if (err) {
       return cb(err);
     }
     cb(null, user); // this is passing back the expected result
   });
},

...

users.js (控制器)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
// The call to the custom validator (shown below)
req.assert('email', 'Email must be unique').checkEmailDupes(user);
...

// Check for email addresses that are already registered
expressValidator.Validator.prototype.checkEmailDupes = function(user) {
  user.checkEmailDupes(this.str, function (err, result) {
    if (err) {
      console.log('An error occurred in checkEmailDupes');
    }
    else {
      console.log('Found a user in checkEmailDupes');
      console.log(result); // this is producing the expected result
    }
  });
  return this.error(this.msg || 'Looks like this email address has already been registered');
  return this;
}

我知道return this.error(this.msg...)需要去别的地方。理想情况下,我会把它加入回调,但是当我这样做的时候

TypeError:对象#没有方法‘错误’

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-30 09:13:28

我最终无法使这种方法发挥作用。由于@robertklep和他的反馈,我决定使用mongo传回的错误代码(在找到电子邮件的非唯一值的情况下,它是MongoError: E11000 duplicate key error index),并基于此设置错误消息。

它最终看起来如下(在用户控制器中):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user.save(function(err) {
  if (err) {
    // Instantiate the errors array
    var errors = [];

    // Email address already in DB
    if (err.code == 11000) {
      // Build the error object
      var error = {
        param: 'email',
        msg: 'The email address entered has already been registered',
        value: ''
      };

      // Push the error onto the errors array
      errors.push(error);
    }

    return res.render('users/signup', {
      errors: errors,
      user: user
    });
  }

  ...
票数 0
EN

Stack Overflow用户

发布于 2013-09-29 23:58:19

尝试这样做(所做的是使用已经“填充”的范围和第一个参数创建一个部分error函数):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
expressValidator.Validator.prototype.checkEmailDupes = function(user) {
  var error = this.error.bind(this, this.msg || 'Looks like this email address has already been registered');

  user.checkEmailDupes(this.str, function (err, result) {
    if (err) {
      console.log('An error occurred in checkEmailDupes');
      return error();
    }
    else {
      console.log('Found a user in checkEmailDupes');
      console.log(result); // this is producing the expected result
    }
  });
  return this;
}

但是,这里可能有一些问题,因为user.checkEmailDupes是异步的,但expressValidator.Validator.prototype.checkEmailDupes不是异步的,我不知道验证器模块的内部工作方式是否存在问题。

编辑:也许我刚才给的this answer也有用。使用express-validator验证数据库约束可能不是最佳解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19084648

复制
相关文章
NodeJS使用Redis键的过期回调
当我支付宝创建订单后, 需要定时的把没有完成的订单给关闭, 这时候需要有个定时任务, 或者队列来完成, 不想安装兔子, 那就用本来就安装了的Redis来简单实现
治电小白菜
2020/08/25
2.4K0
NodeJS使用Redis键的过期回调
【详细】.NET企业微信回调配置(数据回调URL和指令回调URL验证)
  前段时间因为公司业务需求,需要将微信小程序与企业微信对接通,也就是把小程序绑定到对应的企业微信账号下,在该企业微信的用户可以将该小程序绑定到工作台中,然后可以在工作台中打开该小程序并授权。不过将微信小程序与企业微信对接通需要后台去做数据回调URL和指令回调URL验证,因为第一次接触这个然后企业微信文档写的也不是很详细,并且在全网没有找到一篇.NET相关企业微信回调配置验证有用的文章,所以这里把自己的配置详细过程分享出来,希望能够帮助更多的同学。
追逐时光者
2021/09/09
3.8K0
【详细】.NET企业微信回调配置(数据回调URL和指令回调URL验证)
google支付回调验证(备用)
20150218,挂机的日本服务器出现google支付被刷单现象,虽然目前进行的修补,但是这个问题并没有完全从根源上解决。并且公司以前的GooglePlay支付也有不完善的地方,在SDK端给支付回调发送支付信息后,支付回调程序没有调用Google API进行订单验证。因此Google支付流程需要进行完善。
全栈程序员站长
2022/07/12
3.7K0
google支付回调验证(备用)
​29 - 回调函数和回调地狱
原文地址:https://dev.to/bhagatparwinder/callback-functions-callback-hell-79n
前端黑板报
2022/12/01
4.6K0
PHP中的回调函数和匿名函数
枕边书
2018/01/04
3.1K0
SystemVerilog中的callback(回调)
在第二次systemverilog实验中,我看到有同学用到了callback函数,今天就是简单讲讲这个方法。
数字IC小站
2020/06/30
2.6K0
python 回调装饰器
通过使用生成器和协程可以使得回调函数内联在某个函数中。 为了演示说明,假设你有如下所示的一个执行某种计算任务然后调用一个回调函数的函数(参考7.10小节):
用户5760343
2019/10/21
1.2K0
java 中的异步回调
异步回调,本来在c#中是一件极为简单和优雅的事情,想不到在java的世界里,却如此烦琐,先看下类图: 先定义了一个CallBackTask,做为外层的面子工程,其主要工作为start 开始一个异步操作
菩提树下的杨过
2018/01/18
3.2K0
java 中的异步回调
iOS中的「回调(callback)」
本文主要参考:《Object-C 编程 Big Nerd Ranch Guide》一书第24章
iOS Development
2019/02/14
3.5K0
javascript异步中的回调
我们之前介绍了javascript异步的相关内容,我们知道javascript以同步,单线程的方式执行主线程代码,将异步内容放入事件队列中,当主线程内容执行完毕就会立即循环事件队列,直到事件队列为空,当用产生用户交互事件(鼠标点击,点击键盘,滚动屏幕等待),会将事件插入事件队列中,然后继续执行。 处理异步逻辑最常用的方式是什么?没错这就是我们今天要说的---回调
陌上寒
2019/04/02
2.1K0
javascript异步中的回调
JavaScript 中回调、Promise 和 Async/Await 的代码案例
本文将通过代码示例展示如何使用基于回调的 API,然后将其改成使用 Promises,最后再用 Async/Await 语法。本文不会详细解释回调、promise 和 Async/Await 语法。有关这些概念的详细解释,请查看 MDN 的 Asynchronous JavaScript[1],它解释了什么是异步性以及如何用回调、promise 和 Async/Await 语法处理异步 JavaScript。
疯狂的技术宅
2021/06/09
1.5K0
JavaScript 中回调、Promise 和 Async/Await 的代码案例
异步JavaScript:从回调地狱到异步和等待
这是一个典型的异步编程挑战,您如何选择处理异步调用,在很大程度上,会导致或破坏您的应用程序,并且可能是您的整个启动。
WindCoder
2018/09/19
3.7K0
异步JavaScript:从回调地狱到异步和等待
图解NodeJS【基于事件、回调的单线程高性能服务器】原理
刚开始了解Node感觉很吊,各种说高性能,可是一直不理解为什么单线程会比多线程快?为什么异步IO比非阻塞IO快?因此,本篇在阅读相关书籍后,根据自己的理解,整理此文,如有错误,仅代表理论不精,必当修改,以免误导他人。还请多多指正..... 关于阻塞IO和非阻塞IO 系统内核只有两种IO模式—— 阻塞IO和非阻塞IO。这里的IO可不仅仅是读取文件内容,而是更为广泛的概念。比如Socket啊,网络Socket,磁盘读取等等,这些相比于CPU计算都是很耗时的。 下图为阻塞IO的工作模式: 阻塞IO在需要获
用户1154259
2018/01/17
8400
图解NodeJS【基于事件、回调的单线程高性能服务器】原理
ajax中回调的几个坑
在前端开发中,经常要用ajax去拿后台接口返回的数据,总结几个ajax的回调的常见问题,供大家参考爬坑。
全栈程序员站长
2022/07/21
7410
JavaScript中的回调函数(callback)
被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数。
刘亦枫
2020/03/19
7.1K0
回调
回调简单而言:在一个类(A)的方法(a)中调用另一个类(B)的方法(b),当方法(b)执行完之后就调用类(A)中的方法(c),这就是回调的过程,是不是很简单?简单分析可以知道一个类(A)持有另一个类(B)的引用,方法(c)就叫做回调函数,画成UML图就如下所示:
晚上没宵夜
2020/03/10
2.6K0
访问列表中的值
#!/usr/bin/python list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5, 6, 7 ] print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5]
用户8442333
2021/05/27
5.6K0
JS回调函数中的 this 指向(详细)
1. obj.fun() fun 中的 this->obj ,自动指向.前的对象
TimothyJia
2019/11/12
7.5K0
回调函数的工作机制 回调函数的用途
在一般人的眼中,对回调函数并不是十分的了解。实际上,在现在的互联网技术上这种函数有着十分重要的地位。这种函数不仅仅可以使得编程的效率大大提升,还是实现一些特殊功能的必须组成部分。那么什么是回调函数?这样的函数究竟有什么作用?下面就来为大家介绍一下。
用户8739405
2021/07/09
6.8K0
点击加载更多

相似问题

NodeJS回调-访问“res”

21

Nodejs和回调

12

从JavaScript回调访问值

12

回调中的JavaScript/NodeJS回调

10

nodejs瀑布回调中的回调

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文