发送消息(对象)以及404状态代码(nodejs)

问题描述 投票:0回答:1

当前正在学习NodeJS和Nuxt。我希望完全理解从客户端(前端)向服务器(后端)发送对象然后接收响应的周期。

例如,我希望发送一个简单的注册对象:

registerInfo: {
 username: '',
 email: '',
 password: ''
}

此对象通过Vuex操作发送:

async register (vuexContext, registerInfo) {
    try {
      const response = await axios.post('/register', registerInfo)
      console.log(response)
    } catch (err) {
      console.log(err)
    }
  }

路由器(后端在Express中运行)接收请求并在控制器文件中调用适当的功能:

router.post('/register', userController.register)

控制器文件功能如下:

exports.register = async (req, res) => {
  const user = new User(req.body)

  try {
    await user.save()
    res.send({ user })
  } catch (err) {
    res.sendStatus(404).send(err)
  }
}

我想展示我提出问题的所有步骤。假设我们发送了一个空对象(在前端的表单中没有输入任何值),并且Mongoose Schema(下面的代码)指定了所有字段都是必需的。

当猫鼬将要保存到数据库时,它将在Schema中运行并引发错误(即:“需要用户名”),该错误调用catch代码。其中,我想将状态404发送回客户端。但是,与此同时,我也想发送错误对象。

但是,这是我在前端控制台上看到的:

enter image description here

它不包含错误对象(是的,在上面的代码中我没有包含它,但是.send(err)也不起作用)。另外,我可以通过在response对象中检查error属性来在try块中完成整个过程。但是我觉得这很hacky,不是“傻瓜”。我是一名初级开发人员,因此在这方面我可能是完全错误的。

有人对我的问题有见识吗?

谢谢,


const UserSchema = new mongoose.Schema({
  username: {
    type: String,
    minlength: [3, 'Username must be at least 3 characters long'],
    required: [true, 'Username is required'],
    unique: [true, 'Username already exists.']
  },
  email: {
    type: String,
    required: [true, 'Email is required'],
    unique: [true, 'Email already exists.']
  },
  password: {
    type: String,
    minlength: [5, 'Password must be at least 5 characters long.'],
  }
})
node.js mongodb express mongoose nuxt.js
1个回答
0
投票

💡唯一的原因为什么会收到错误404,这是因为,如果从验证中得到一些错误,您只会得到req.sendStatus()

👨🏻‍🏫将此res.sendStatus(404);更改为res.status(404).send(error);

现在,您的代码将类似于以下代码:👇

exports.register = async (req, res) => {
  const user = new User(req.body)

  try {
    await user.save()
    res.send({ user })
  } catch (err) {
    // 400: badrequest
    res.status(400).send(err)
  }
}

希望它能对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.