为什么声明返回值时我的函数没有结束(Node.js和Express.js)

最高

我正在尝试使用Node和Express编写POST端点,该端点为用户创建一个新帐户。在我的函数中,我正在执行2个数据库调用。第一个检查以确保用户在请求中发送的电子邮件在数据库中不存在,第二个检查如果第一个函数返回为false则插入用户:

        UserService.checkDupEmail(db, user.email)
            .then((result) => {
                if (result === true) {
                    const message = 'Email already exists.';
                    return res
                        .status(400)
                        .json('Error: ' + message)
                };
            });
        
        const table = 'users';
        BaseService.post(db, table, user)
            .then((user) => {
                Response.created(res, user);
            })
            .catch(next)

如果第一个电话以真实含义返回,则该电子邮件已经存在,我想立即返回带有错误代码和JSON消息的响应,说明该电子邮件已存在。发生的情况是正在发送响应,但是函数继续尝试进行第二次数据库调用,这当然会失败,因为电子邮件已经存在。

如果我没记错的话,我相信这就是Express和中间件应该工作的方式吗?它应该是一连串的验证和中间件,只要它们通过,它就会一直沿链下降直到最后一个CRUD操作?

微电脑

除非调用如下所示提供的下一个变量,否则中间件链不会在Express.js中自动继续:

router.post('/createUser', function (req, res, next) { next(); }

创建诺言时,返回仅属于诺言,而不会终止Express函数的执行。当您检查时result === true,我将创建一个else以便在数据库中找不到结果并在其中添加新用户。我会将您的代码更改为:

    UserService.checkDupEmail(db, user.email)
                .then((result) => {
                    if (result === true) {
                        const message = 'Email already exists.';
                        return res
                            .status(400)
                            .json('Error: ' + message)
                    } else {
                       const table = 'users';
                       BaseService.post(db, table, user)
                         .then((user) => {
                             Response.created(res, user);
                          })
                         .catch(next)
                   }
                }).catch(next){

                };
            
       

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js Javascript和Express

来自分类Dev

Node.js / Express和并行队列

来自分类Dev

Node Express失败加载CSS和JS

来自分类Dev

Node.js和Express错误

来自分类Dev

Node.js Javascript和Express

来自分类Dev

为什么我的js函数返回自身而不是返回值?[角度]

来自分类Dev

为什么我的js函数返回自身而不是返回值?[角度]

来自分类Dev

使用Node JS和Express JS的HTTPS请求缓慢?

来自分类Dev

Node.js + express.js和线程安全

来自分类Dev

Node.js框架和Express.js

来自分类Dev

Node.js + express.js和线程安全

来自分类Dev

Node JS,Javascript:为什么函数返回值未定义?

来自分类Dev

TypeError:不是Node和Express JS的构造函数

来自分类Dev

具有参数的Node.js和Express路由

来自分类Dev

node.js和express -bash:/ usr / bin / express:没有这样的文件或目录

来自分类Dev

Node.js Express express.json和express.urlen用表单提交编码

来自分类Dev

使用Node和Express JS防止暴力破解

来自分类Dev

使用node.js / express和AngularJS的CORS请求

来自分类Dev

无法使用Node.js和Express捕获POST参数

来自分类Dev

使用Bootstrap,Express和Node.js登录表单

来自分类Dev

使用HTTPS和HTTP Express(node.js)

来自分类Dev

Node.JS,Express和MongoDB ::多个集合

来自分类Dev

Node.js和Express中的活动菜单项

来自分类Dev

Node.js,Express和Mongoose提供多个静态文件

来自分类Dev

使用Node.js(Express)和mySQL插入TIMESTAMP?

来自分类Dev

Node.js和Express; 开机自检404

来自分类Dev

如何使用Node和Express.js自动包含服务

来自分类Dev

重定向后编辑响应(node.js和express)

来自分类Dev

使用猫鼬和Express / Node Js提取数据