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

res.json 发送 html 而不是 json

如何解决res.json 发送 html 而不是 json

一切正常。现在,由于某些原因,当我收到错误(例如无效密码)时,我抛出的错误不是 json,而是 html。

所以这是我通常定义错误的方式:

try {

    const errors = validationResult(req)

    // some code
    if(!isEqual) {

        const error = new Error('invalid password,please try again');
        error.data = errors.array();
        error.statusCode = 401;
        throw error; // I throw the error going to the catch block

    } catch (err) {

        next(err) // from the catch block I go to the error middleware

     }

错误中间件看起来像这样:

app.use((error,req,res,next) => {

    console.log('error middleware: ' + error);

    const message = error.message;
    const status = error.statusCode || 500;
    const data = error.data;

    res.status(status).json({ message,data }); // I also tried returning this with no success

});

而且,在我的前端(反应)上,我有以下内容

        await fetch(`http://localhost:8090/auth/login`,{

        method: 'POST',headers: {

            'Content-Type': 'application/json','Accept': 'application/json',},credentials: "include",body: JSON.stringify({

            email: this.state.email,password: this.state.password,}),})

有谁知道为什么这些错误不是以 json 格式而是以 html 格式发送的?

对于用户可能发生的每一个错误,我都会遇到这种情况。

所以我一直收到的错误是:SyntaxError: Unexpected token

我通常在前端使用这些错误,以便在出现问题(例如无效密码)时向用户显示

req 标头很好,响应标头是 text/html。另外,如果我点击“响应”而不是将数据视为 json,我会将它们视为 html 代码(所以所有标签 html、body 和错误都在 pre 标签中,说实话,我不知道这是什么

先谢谢你。如果由于某些原因我违反了 stackoverflow 政策,请告诉我,我会更新我的问题。

解决方法

如果您使用的是 express,请检查错误中间件之前是否有 app.use(express.json());

另外有一些方法可以正确返回 json,也可以尝试其中的一些:Proper way to return JSON using node or Express

,

为了解决这个问题,我删除了错误中间件,还删除了 if 块中的所有内容并将其替换为 return res.status(401).json({ message: 'invalid password' });。老实说,我不知道为什么一个代码有效而另一个无效,因为它们几乎是相同的代码..我希望它会对某人有所帮助!

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