如何在函数中运行函数 如果第一个函数抛出任何错误,则第二个函数应运行
server.post('/User', (req, res,next) => {
// Some Task
if(){
//Do something
}
else {
server.post('/submit', (req, res) => {
答案 0 :(得分:0)
如果第一个函数返回promise
,则可以在捕获到以下错误后运行这些函数:
firstFunction()
.catch(e => {
secondFunction();
});
否则,您可以像这样使用try-catch statement
:
try {
firstFunction();
} catch (e) {
secondFunction();
}
答案 1 :(得分:0)
在Express中,next
参数允许路由/中间件将处理传递到下一个路由/中间件(实际上,所有路由只是不调用下一步的中间件)。因此,您只需调用next()
就可以实现路由处理的传递:
function submitHandler (req, res) {
// ...
}
server.post('/User',
(req, res, next) => {
if(/* all ok */){
//Do something
}
else {
next(); // continue processing
return;
}
},
submitHandler // continue with this function
)
server.post('/submit', submitHandler); // also have a separate endpoint where
// submitHandler can be accessed directly
答案 2 :(得分:0)
请记住,server.post(...)
实际上并未在该路由中执行该操作。它只是为将来的某个路由注册一个路由处理程序。因此,您通常不会做以下事情:
server.post("/firstRoute", function(req, res, next) {
if (some condition) {
server.post("/secondRoute", ...);
}
});
这将根据一个用户在其/firstRoute
请求中所做的操作为所有用户配置第二个路由处理程序。
请记住,服务器包含一组路由处理程序,这些路由处理程序适用于现在和将来使用该服务器的所有用户。您的代码提出的建议是,基于一个特定传入请求中的某些数据,您将更改服务器为所有用户支持的路由。那不是您编写服务器代码的方式。
如果您需要维护特定用户的服务器端状态,以使来自一个请求的数据影响将来某个请求的工作方式,则通常将创建一个用户会话对象,将该用户的状态存储在会话中,然后一个将来的请求,您可以在会话中查询数据,以帮助您响应将来的请求。
一个简单的例子是购物车。每次将商品添加到购物车时,数据都会添加到会话对象中。然后,当用户要求查看购物车时,您可以通过查询该用户的会话对象中的项目来呈现页面。如果他们随后要求“结帐”,则可以为他们购买购物车中的物品。您无需为“查看购物车”和“结帐”注册和取消注册路线。这些路线总是被注册的。相反,您可以使用会话对象中的数据来帮助您处理这些请求。
如果要从多个不同的路由运行相同的代码,则只需将该代码移到共享函数中,然后从多个路由处理程序中调用该共享函数。