【问题标题】:i want to load a new page when a function throws an error我想在函数抛出错误时加载新页面
【发布时间】:2022-11-23 08:49:27
【问题描述】:

我想在函数抛出错误时加载一个新的错误页面。

我想在抛出错误时显示一个错误页面,但该页面卡在加载屏幕上并且我的日志中有错误消息。现在,如果函数 getStockPoints 抛出错误,并且如果我将此函数导出到 app.js 并在其中使用 try 和 catch 块调用它,它会捕获错误,但页面只是停留在加载过程中。我想让它转到错误页面


module.exports = {
  async getStocks () {
    return stocks
  },
  async getStockPoints (stockName, timestamp) {
    if (Math.random() < FAILUE_RATE) {
      throw new Error('Failed to generate stock data')
    }
    if (!stocks.includes(stockName)) {
      throw new Error(`Uknown stock ${stockName}`)
    }
    const timestamps = getTimestamps(+timestamp, 10)
    return getSeries(stockName, timestamps).map((value, idx) => ({
      value,
      timestamp: timestamps[idx]
    }))
  }
}

我做了 try catch 方法并尝试加载一个新页面,但它不起作用。

app.get('/stocks/:symbol', async (req, res) => {
  const { params: { symbol } } = req
  try{
    const data = await stocks.getStockPoints(symbol, new Date())
    res.render('stockPoints', {DATA: data})
  }
  catch(e){
    console.log("ERRORs: ")
    console.error(e)
  }
})

错误信息如下 页面现在卡在加载中

Error: Uknown stock df
    at Object.getStockPoints (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\stocks.js:47:13)
    at C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\app.js:24:31
    at Layer.handle [as handle_request] (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\route.js:144:13)
    at Route.dispatch (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\route.js:114:3)
    at Layer.handle [as handle_request] (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\index.js:284:15
    at param (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\index.js:365:14)
    at param (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\index.js:376:14)
    at Function.process_params (C:\Users\talha_znbd0fl\Desktop\JavaScript-Challenge-master-main\JavaScript-Challenge-master-main\node_modules\express\lib\router\index.js:421:3)

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    您被困在加载页面,因为您的服务器从不响应请求。您可以调用多个函数来提供结果,但如果您可能想要呈现错误页面。为此,您所要做的就是在异常处理程序中调用res.render。像这样:

    app.get('/stocks/:symbol', async (req, res) => {
      const { params: { symbol } } = req
      try{
        const data = await stocks.getStockPoints(symbol, new Date())
        res.render('stockPoints', {DATA: data})
      } catch (e){
        console.log("ERRORs: ")
        console.error(e)
        res.render('errorPage')
      }
    })
    

    然后,创建模板errorPage。它可以是任何东西,但这里有一些简单的东西可以帮助您入门:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Error</title>
    </head>
    <body>
        <h1>An error occured</h1>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多