2015-03-03 86 views
0

檢測請求是針對API調用還是針對頁面請求的最佳方法是什麼?我想爲頁面請求呈現一個視圖,併發送用於API請求的JSON。例如:針對API和頁面請求的不同ExpressJS錯誤?

常見錯誤頁面請求:

if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('500', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

的API請求常見錯誤:

if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.send({ 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

有關使用該思考,但希望其他人的意見:

if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     if (req.url.startsWith('/api')){ 
      res.send({ 
       msg: err.message, 
       err: err 
      }); 
     } else { 
      res.render('500', { 
       message: err.message, 
       error: err 
      }); 
     } 
    }); 
} 

回答

0

有API調用和頁面請求之間的區別並不是它們的頭部。它也可能取決於你如何構建你的應用程序/路線。

我建議如下:

解決方法一:

採用了獨特的中間件,檢查內容類型的請求頭:

app.use(function(err, req, res, next) { 
    if (req.get('Content-Type') === 'application/json') { 
     // API Stuff 
    } else { 
     // Page Stuff 
    } 
}); 

注:我在這裏假設你的API是JSON類型的。

解決方法二:

  1. Create a router在其上所有的API映射。
  2. 安裝這個路由器和像

除權公共路線的你的特殊的API中間件:

app.use('/api', apiRouter, apiMiddleware) 
+0

啊哈......良好的通話...檢查內容類型。 – 2015-03-03 14:32:34

+0

很高興幫助:)如果我是你我可能會檢查內容類型是否以'application /'開始 – blint 2015-03-03 14:43:57