当前正在学习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发送回客户端。但是,与此同时,我也想发送错误对象。
但是,这是我在前端控制台上看到的:
它不包含错误对象(是的,在上面的代码中我没有包含它,但是.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.'],
}
})
💡唯一的原因为什么会收到错误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)
}
}
希望它能对您有所帮助。