【问题标题】:How to run function with this function如何使用此功能运行功能
【发布时间】:2019-08-02 09:44:57
【问题描述】:

如何在函数内运行函数 如果第一个函数抛出任何错误,那么第二个函数应该运行

  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) => {

【问题讨论】:

  • 你的意思是像一个后备?

标签: node.js


【解决方案1】:

如果第一个函数返回 promise,您可以在捕获错误后运行这些函数:

firstFunction()
  .catch(e => {
    secondFunction();
  });

否则你可以像这样使用try-catch statement

try {
  firstFunction();
} catch (e) {
  secondFunction();
}

【讨论】:

  • 我试过了但没用 }).catch((err) => { server.post('/submit', (req, res, ) => {
  • 你确定函数返回错误吗?如果你尝试console.log(err)
【解决方案2】:

在 Express 中,next 参数允许路由/中间件将处理传递给下一个路由/中间件(实际上,所有路由都只是不调用 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

【讨论】:

    【解决方案3】:

    请记住,server.post(...) 实际上并没有在该路由中执行该操作。它只是为一些未来的路线注册一个路线处理程序。所以,你通常不会做这样的事情:

     server.post("/firstRoute", function(req, res, next) {
         if (some condition) {
             server.post("/secondRoute", ...);
         }
     });
    

    这将根据一个用户在其/firstRoute 请求中的操作为所有用户配置第二个路由处理程序。

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

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

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


    如果您想从多个不同的路由运行相同的代码,那么您只需将该代码移动到一个共享函数中并从多个路由处理程序调用该共享函数。

    【讨论】:

      猜你喜欢
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2021-06-14
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多