【发布时间】:2021-02-19 20:34:20
【问题描述】:
我正在构建一个nodeJS身份验证API,我在GitHub上找到了很多资源,我对编写和处理promise错误感到困惑,我想了解它以更改克隆项目上的一些代码。
第一个函数是位于注册服务上的注册:
async function register(params, origin) {
// validate
if (await db.Account.findOne({ email: params.email })) {
// send already registered error in email to prevent account enumeration
return await sendAlreadyRegisteredEmail(params.email, origin);
}
// create account object
const account = new db.Account(params);
// first registered account is an admin
const isFirstAccount = (await db.Account.countDocuments({})) === 0;
account.role = isFirstAccount ? Role.Admin : Role.User;
account.verificationToken = randomTokenString();
// hash password
account.passwordHash = hash(params.password);
// save account
await account.save();
// send email
await sendVerificationEmail(account, origin);
}
当一个帐户已经注册时,我想返回一个错误,不发送电子邮件(第 5 行)
帐户控制者
这是我要处理从帐户服务返回的承诺的控制器:
router.post('/register', registerSchema, register);
function register(req, res, next) {
accountService.register(req.body, req.get('origin'))
.then(() => res.json({ message: 'Registration successful, please check your email for verification instructions' }))
.catch(next);
}
我认为 .catch 函数特征是一个被拒绝的承诺,不是吗? .catch(next) 究竟做了什么?如果注册时已经存在帐户,如何返回带有状态码的 api 错误?
【问题讨论】:
-
快速提问,您是否在 路由器 中使用控制器来处理登录逻辑?
-
这是我关注的链接,jasonwatmore.com/post/2020/05/13/…,我想稍微更改一下代码,例如如果帐户已经存在则返回错误
标签: node.js api error-handling promise middleware