相关疑难解决方法(0)

在Mongoose最佳实践的基础上使用Joi进行验证吗?

我正在使用Node.js,Mongoose和Koa开发RESTful API,并且对于模式和输入验证的最佳实践有些困惑。

目前,我对每种资源都有Mongoose和Joi模式。猫鼬模式仅包含有关特定资源的基本信息。例:

const UserSchema = new mongoose.Schema({
  email: {
    type: String,
    lowercase: true,
  },
  firstName: String,
  lastName: String,
  phone: String,
  city: String,
  state: String,
  country: String,
});
Run Code Online (Sandbox Code Playgroud)

Joi模式包含有关对象的每个属性的详细信息:

{
  email: Joi.string().email().required(),
  firstName: Joi.string().min(2).max(50).required(),
  lastName: Joi.string().min(2).max(50).required(),
  phone: Joi.string().min(2).max(50).required(),
  city: Joi.string().min(2).max(50).required(),
  state: Joi.string().min(2).max(50).required(),
  country: Joi.string().min(2).max(50).required(),
}
Run Code Online (Sandbox Code Playgroud)

当写入数据库时​​,Mongoose模式用于在端点处理程序级别创建给定资源的新实例。

router.post('/', validate, routeHandler(async (ctx) => {
  const userObj = new User(ctx.request.body);
  const user = await userObj.save();

  ctx.send(201, {
    success: true,
    user,
  });
}));
Run Code Online (Sandbox Code Playgroud)

Joi模式在验证中间件中用于验证用户输入。对于每种资源,我有3种不同的Joi模式,因为允许的输入取决于请求方法(POST,PUT,PATCH)而有所不同。

async function validate(ctx, next) {
  const user = ctx.request.body;
  const …
Run Code Online (Sandbox Code Playgroud)

rest mongoose node.js koa joi

5
推荐指数
1
解决办法
452
查看次数

标签 统计

joi ×1

koa ×1

mongoose ×1

node.js ×1

rest ×1