API与页面请求的不同ExpressJS错误?

时间:2015-03-03 14:03:45

标签: node.js express

检测请求是针对API调用还是针对页面请求的最佳方法是什么?我想呈现页面请求的视图并发送API请求的JSON。例如:

页面请求的常见错误:

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
            });
        }
    });
}

1 个答案:

答案 0 :(得分: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中间件安装在公共路由上,如
  3. 实施例

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