如何使用此功能运行功能

时间:2019-08-02 09:44:57

标签: node.js

如何在函数中运行函数 如果第一个函数抛出任何错误,则第二个函数应运行

  1. server.post('/ User',(req,res,next)=>
  2. server.post('/ submit',(req,res)=>

server.post('/User', (req, res,next) => {
// Some Task 

if(){
//Do something

}
else {

server.post('/submit', (req, res) => {

3 个答案:

答案 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请求中所做的操作为所有用户配置第二个路由处理程序。

请记住,服务器包含一组路由处理程序,这些路由处理程序适用于现在和将来使用该服务器的所有用户。您的代码提出的建议是,基于一个特定传入请求中的某些数据,您将更改服务器为所有用户支持的路由。那不是您编写服务器代码的方式。

如果您需要维护特定用户的服务器端状态,以使来自一个请求的数据影响将来某个请求的工作方式,则通常将创建一个用户会话对象,将该用户的状态存储在会话中,然后一个将来的请求,您可以在会话中查询数据,以帮助您响应将来的请求。

一个简单的例子是购物车。每次将商品添加到购物车时,数据都会添加到会话对象中。然后,当用户要求查看购物车时,您可以通过查询该用户的会话对象中的项目来呈现页面。如果他们随后要求“结帐”,则可以为他们购买购物车中的物品。您无需为“查看购物车”和“结帐”注册和取消注册路线。这些路线总是被注册的。相反,您可以使用会话对象中的数据来帮助您处理这些请求。


如果要从多个不同的路由运行相同的代码,则只需将该代码移到共享函数中,然后从多个路由处理程序中调用该共享函数。