我正在开发REST API应用程序。每当我想处理API路由时,通常(如果不是总是)我都必须放置嵌套的if-else
和try-catch
块来检查错误请求,数据库查询失败,资源不存在,重复项,等等。这使我的代码难以阅读和维护。
我试图通过使用async/await
结构来最小化回调,但是我在路由中间件中的代码似乎总是具有至少2-3个缩进级别。我想找到一种使函数嵌套更少的方法。
例如,我具有以下中间件功能:
router.post('/', async (req, res, next) => {
if (!error1) {
try {
const success = await doSomething();
if (success) {
const someString = await doSomethingElse();
if (someString === 'someValue') {
// **SUCCESSFUL RESPONSE HERE**
} else {
// send some error response
}
} else {
// send some error response
}
} catch (error2) {
// send some error response
}
} else {
// send some error response
}
});
我认为我可以做这样的事情,一旦出现错误,这将使函数的流程短路。
router.post('/', async (req, res, next) => {
if (error1) {
// send some error response
return;
}
try {
const success = await doSomething();
if (!success) {
// send some error response
return;
}
const someString = await doSomethingElse();
if (someString !== 'someValue') {
// send some error response
return;
}
// **SUCCESSFUL RESPONSE HERE**
} catch (error2) {
// send some error response
}
});
我的问题是:
return;
或return someValue;
会发生什么? Express是否需要额外的处理资源来处理返回的值并尝试以某种方式解决它?