错误: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
没有返回catch
able 的内容,但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 转换为对象”
TypeError:在使用 Python 进行网络抓取时,只能将 str(而不是“列表”)连接到 str 错误