如何解决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 举报,一经查实,本站将立刻删除。