【发布时间】:2021-07-02 17:30:47
【问题描述】:
我是 node/express/mongoose 和一般后端的新手,我正在从头开始构建 API。
我将代码拆分为控制器和 DAO(猫鼬模型),但我不确定应该在哪里进行验证,控制器和模型究竟应该做什么?
例如,对于路由 GET /users/:id,我希望它:
- 如果给定的 id 不是有效的 ObjectId,则返回 400
- 如果 id 是有效的 ObjectId,但不存在具有此 id 的文档,则返回 404
- 如果找到文档,则返回 200,并在发送响应之前删除一些字段(密码、__v 和 _id(因为我创建了一个没有下划线的虚拟字段“id”))
- 否则返回 500
这是我尝试过的。它目前正在做我想做的一切,但我不确定它是否是最好的实现:
users.controller.js
const UserModel = require('../models/users.model')
const mongoose = require('mongoose')
exports.getById = async (req, res) => {
// Check that the id is a valid ObjectId
if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
return res.status(400).json({ error: 'Invalid ObjectID' })
}
try {
const user = await UserModel.findById(req.params.id)
if (!user) return res.status(404).json({ error: 'No user with this ID' })
res.status(200).send(user)
} catch (err) {
res.status(500).send(err)
}
}
users.model.js
exports.findById = async (id) => {
let user = await User.findById(id)
if (!user) {
return null
}
user = user.toJSON()
delete user._id
delete user.__v
delete user.password
return user
}
这是构建事物的最佳方式吗?请批评并提出任何改进和最佳做法。
【问题讨论】: