Node Express没有发送自定义错误信息。

3

我正在尝试制作一个npm模块,用户需要发送他的token和id才能连接。

这是模块的代码:

var https = require('https');
var fetch = require('node-fetch')


module.exports = class Cloud_client {
   constructor(client,token){
      this.token = token ;
      this.client = client;
      if(!token) return console.error(`[cdl.js] No token provided`);
      if(!client)  return console.error(`[cdl.js] No Client Id provided`);
   }
  login() {
     fetch(`https://www.cloudlist.xyz/isvalid/${this.token}`, {
        method: "POST",
        headers: {
        "Content-Type": "application/json"
        },
        body:JSON.stringify({client:this.client}),
          }).then(async response => {
            console.log(response)
    return console.error(`[cdl.js] ${response.statusText}`); // eslint-disable-line no-console

    })
  }
}

服务器端的帖子处理程序:

    app.post("/isvalid/:token", limiter ,async (req, res) => { 
  if(!req.body.client) return res.status(204).send({message: 'No id provided'});
  if(!req.params.token ) return res.status(204).send({message: 'No token provided'});
database.ref(`Bots/${req.body.client}`).once("value",function(data) {
  if(data.val() === null) return res.status(204).send({message: 'Invalid user'});
  if(!data.val().apiKey) return res.status(204).send({message: "This Client doesn't have an api key yet"});
  if(data.val().apiKey === req.params.token) {
    res.status(200 ).send({message: `Logged in as ${data.val().bot_name}`});
  }else {
    return res.status(401).send({message:"Incorrect authorization token."});   
  } 
})
})

我收到了一个错误信息https://prnt.sc/r8iejl,但是这个消息来自代码,这里是401,并不是定制的消息“Incorrect authorization token。”

当我尝试访问response.body.message或response.message时,它们的值为undefined,我无法接收到我的错误代码。我已经尝试使用return res.status(401).json({message: "Incorrect authorization token"}),但我再次获得状态错误代码。

3个回答

2
使用try-catch并使用错误中的响应属性来显示错误消息。
catch(error){
   if(error.response){
     console.log(error.response.data); // Message from your server
     }
 }

这个答案可行!我之前在 catch 里只是用 console.log(error) 打印出来的信息类似于:“请求失败,状态码为400”。但是使用 error.response.data,它实际上打印了我的错误信息。有点不直观,因为我本来期望 error 打印出一个带有 response 属性的对象,例如 visible。 - yeahman14
很高兴能帮助到你。 :) - Dibyajyoti Mishra

2
我遇到了相同的问题。如果我发送res.status(401).json({message: "Incorrect authorization token"}),我会收到You do not have permission to view this directory or page
我的问题是我正在使用iisnode通过IIS运行nodejs。 默认情况下,IIS会替换您发送的任何错误消息。可以通过在<system.webServer>下的web.config文件中添加以下代码来关闭此行为(source): <httpErrors existingResponse="PassThrough" /> 重新启动服务器后,我能够收到{message: "Incorrect authorization token"}

0
问题在于,在 Express 中出现错误时,您必须使用正确的命名约定。
您必须使用errorMessage什么都不用,否则错误响应中将没有任何内容(尽管如果您不使用 errorMessage,仍然可以在网络响应中找到一些内容--这让我认为 Express 出了问题)。 res.status(401).send({errorMessage: "这是我的自定义消息"}) 或者 res.status(401).send({errorMessage: {message: "这是我的自定义对象", value: 32}}) 希望这可以帮助您 :P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接