微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Express.js 意外行为

如何解决Express.js 意外行为

我的应用出现了一些意外行为。 我的 app.js 代码如下所示:

$.

当我使用 JSON 正文和 application/xml 作为标题中的内容类型向 /consents 端点发送请求时,它会在我调试应用程序时直接转到业务错误中间件而不是同意路由器。

我的意思是这样的请求:

app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

app.use(bodyParser.xml({
    xmlParSEOptions: {
        normalize: true,normalizeTags: false,explicitArray: true
    }
}));

//app.use(bodyParser.raw({ inflate: true,limit: '5000kb',type: 'text' }));



app.get(constants.APP_NAME_URL + constants.VERSION_URL + '/version',function (request,response) {
    response.sendFile('version.json',{root: path.join('./files')});
});


app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/accounts',accountsRouter);
app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/consents',consentsRouter,response) {
        console.log("hi");
    });

app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/funds-confirmations',fundsConfirmationRouter);

app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/periodic-payments',paymentsRouter);
app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/payments',paymentsRouter);
app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/bulk-payments',paymentsRouter);

app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/redirect',redirectRouter);

app.use(constants.APP_NAME_URL + constants.VERSION_URL + '/e2e-status',e2eRouter);

app.use(function(err,req,res,next) {
    var businessErrorMessage = err.errorMessage ? err.errorMessage : constants.ERROR_MESSAGE_UNEXPECTED_ERROR;
    var businessErrorCode = err.errorCode ? err.errorCode : constants.ERROR_CODE_UNEXPECTED_ERROR;
    var errorResponse = errorHandler.errorResponse(constants.ERROR_CATEGORY_ERROR,businessErrorCode,businessErrorMessage);
    debug(err.stack);
    responseBuilder.respond(req,errorResponse,400,constants.CONTENT_TYPE_APPLICATION_JSON);
});

如果我通过 Postman 发送这个请求,我会得到业务错误中间件而不是同意路由器。如果我将内容类型更改为 application/json 或诸如“hi”之类的废话,我会进入同意路由器,我该如何解释这种行为?

解决方法

如果您要做的只是在有人向您发送带有 Content-Type: application/xml 的帖子时发送错误,那么您可以使用一些简单的中间件,如下所示:

app.use((req,res,next) => {
    if (req.get('Content-Type') === "application/xml") {
        res.status(415).send("Unsupported content-type");
    } else {
        next();
    }
});

而且,把它放在你的任何请求处理程序之前,这样它就可以首先破解请求。如果您希望这仅对 POST 请求有效,那么您还可以检查是否 req.method === "POST"

并且,在此处删除该内容类型的中间件:

app.use(bodyParser.xml({...}));

如果您不打算使用该内容类型,则不需要解析它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?