2015-03-03 21 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

相关问题