Man*_*tto 7 mongoose node.js hapijs joi mongoose-schema
我正在使用Hapi开发一个Web服务,Mongoose作为ODM,Joi作为验证器.我真的很喜欢Joi的验证以及它与HAPI连接的方式(我需要Joi的描述函数来显示一些swagger的描述)但是我不想维护两个模式,一个用于Joi,一个用于mongoose; 我想使用Joi定义我的模式,然后只能导出Mongoose所需的基本模式.例如:
mySchema.js
module.exports = {
name : String,
address: String
}
Run Code Online (Sandbox Code Playgroud)
myValidator.js
module.exports = {
payload: {
name: Joi.description('A name').string().required(),
address: Joi.description('An address').string()
}
}
Run Code Online (Sandbox Code Playgroud)
myModel.js
const mongoose = require('mongoose'),
mySchema = require('./mySchema');
var schemaInstance = new mongoose.Schema(mySchema),
myModel = mongoose.model('myModel', schemaInstance);
Run Code Online (Sandbox Code Playgroud)
myHapiRoute.js
const myValidator = require('./myValidator.js'),
myController = require('./myController.js');
...
{
method: 'POST',
path: '/create',
config: {
description: 'create something',
tags: ['api'],
handler: myController,
validate: myValidator
}
}
...
Run Code Online (Sandbox Code Playgroud)
我想避免麻烦,保持mySchema.js文件生成它究竟来自淳佳的架构.
有关如何做或任何不同方法的任何建议?
为此,您可以使用Joigoose将您的 Joi 模式转换为 Mongoose 模式,如下例所示:
const mongoose = require('mongoose')
const joi = require('joi')
const joigoose = require('joigoose')(mongoose)
const joiSchema = joi.object().keys({
name: joi.description('A name').string().required(),
address: joi.description('An address').string()
})
const mongooseSchema = new mongoose.Schema(joigoose.convert(joiSchema))
mongose.model('Model', mongooseSchema)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3664 次 |
| 最近记录: |