错误:TypeError:尝试为网站 node.js 注册用户时无法读取未定义的属性“catch”

Posted

技术标签:

【中文标题】错误:TypeError:尝试为网站 node.js 注册用户时无法读取未定义的属性“catch”【英文标题】:Error: TypeError: Cannot read property 'catch' of undefined when trying to register user for website node.js 【发布时间】:2018-09-23 07:47:34 【问题描述】:

我似乎在一个应该注册用户的 javascript 函数中搞砸了我的一个承诺(我认为)。我已经包含了发布请求和实际功能本身。

app.post("/register", (req, res) => 
    dataServiceAuth.registerUser(req.body).then(() => 
        res.render("register", successMessage: "User created");
    ).catch((err) => 
        res.render("register", errorMessage: err, user: req.body.user);
    );
);



module.exports.registerUser = function (userData) 
    return new Promise(function (resolve, reject) 
        if (userData.password != userData.password2) 
            reject("Passwords do not match");
        
        else 
            let newUser = new User(userData);

            newUser.save((err) => 
                resolve();
            ).catch((err) => 
                if (err) 
                    if (err.code == 11000) 
                        reject('User Name already taken');
                    
                    else 
                        reject('There was an error creating the user: $err');
                    
                
            );
        
    );
;

【问题讨论】:

似乎newUser.save 没有返回catchable 的内容,但newUser.save 未发布在您的代码中。 检查 newUser.save 是否是一个 Node 样式的回调,当操作成功时,它会为 err 参数传递一个 false 值,如果出错则传递一个非 false 值(包括非零数字)发生了。 【参考方案1】:

如果newUser.save 可以返回一个promise,那么你绝对不应该向它传递回调,甚至根本不应该使用Promise 构造函数。如果你真的想用字符串拒绝,实现的方法是通过将 newUser.save().catch 的拒绝转换为新的拒绝,并返回它们,并从 registerUser 返回结果承诺:

module.exports.registerUser = function (userData) 
    if (userData.password != userData.password2) 
        return Promise.reject("Passwords do not match");
    

    let newUser = new User(userData);

    return newUser.save().catch((err) => 
        if (err.code == 11000) 
            return Promise.reject('User Name already taken');
        
        else 
            return Promise.reject('There was an error creating the user: $err');
        
    );
;

【讨论】:

Awesome 看起来解决了所有问题,而且看起来也更干净了。

以上是关于错误:TypeError:尝试为网站 node.js 注册用户时无法读取未定义的属性“catch”的主要内容,如果未能解决你的问题,请参考以下文章

实现数据表时遇到错误-TypeError:将循环结构转换为 JSON

收到错误“创建 HelloWorld 错误:TypeError:无法将未定义或 null 转换为对象”

Node.j之错误listen EADDRNOTAVAIL

TypeError:在使用 Python 进行网络抓取时,只能将 str(而不是“列表”)连接到 str 错误

PYTHON,Midpoint方法,TypeError:'float'对象不能解释为整数

TypeError:无法将“4”解释为数据类型