【问题标题】:Different ExpressJS Error for API vs Page Request?API 与页面请求的不同 ExpressJS 错误?
【发布时间】:2015-03-03 14:03:45
【问题描述】:

检测请求是针对 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
            });
        }
    });
}

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    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)
    

    【讨论】:

    • 很高兴它有帮助 :) 如果我是你,我可能会检查内容类型是否以 application/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2017-01-14
    • 2020-10-26
    • 2011-03-31
    • 2010-11-04
    相关资源
    最近更新 更多