首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在这个Mongoose Schema中使用@hapi/joi?

如何在这个Mongoose Schema中使用@hapi/joi?
EN

Stack Overflow用户
提问于 2019-05-10 10:40:48
回答 1查看 658关注 0票数 1

我试图让我的nodejs api与Joi一起工作,但它不起作用。我哪里做错了?这是我的商业模式:

代码语言:javascript
运行
复制
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const Joi = require('@hapi/joi');

// Define collection and schema for Business
let Business = new Schema({
  model: {
    type: Joi.string().alphanum().min(2).max(255).required()
  },
  brand: {
    type: Joi.string().alphanum().min(2).max(255).trim()
  },
  price: {
    type: Joi.number().positive()
  },
  photo: {
    type: Joi.string().max(255).trim()
  }
},{
    collection: 'business'
});


module.exports = mongoose.model('Business', Business);

这是我的商业路线:

代码语言:javascript
运行
复制
const express = require('express');
const businessRoutes = express.Router();

// Require Business model in our routes module
let Business = require('./business.model');

// Defined store route
businessRoutes.route('/add').post(function (req, res) {
  let business = new Business(req.body);
  business.save()
    .then(business => {
      res.status(200).json({'business': 'business in added successfully'});
    })
    .catch(err => {
    res.status(400).send("unable to save to database");
    });
});

// Defined get data(index or listing) route
businessRoutes.route('/').get(function (req, res) {
    Business.find(function(err, businesses){
    if(err){
      console.log(err);
    }
    else {
      res.json(businesses);
    }
  });
});

// Defined edit route
businessRoutes.route('/edit/:id').get(function (req, res) {
  let id = req.params.id;
  Business.findById(id, function (err, business){
      res.json(business);
  });
});

//  Defined update route
businessRoutes.route('/update/:id').post(function (req, res) {
    Business.findById(req.params.id, function(err, business) {
    if (!business)
      res.status(404).send("data is not found");
    else {
        business.model = req.body.model;
        business.brand = req.body.brand;
        business.price = req.body.price;
        business.photo = req.body.photo;

        business.save().then(business => {
          res.json('Update complete');
      })
      .catch(err => {
            res.status(400).send("unable to update the database");
      });
    }
  });
});

// Defined delete | remove | destroy route
businessRoutes.route('/delete/:id').get(function (req, res) {
    Business.findByIdAndRemove({_id: req.params.id}, function(err, business){
        if(err) res.json(err);
        else res.json('Successfully removed');
    });
});

module.exports = businessRoutes;

如果我尝试定义let Business = Joi.object().keys,它会抛出一个错误。

我想我应该把我的let Business改成其他的,但是我不知道,因为这是我的第二个nodejs应用,而且我对后端的东西还是个新手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 11:08:30

我可以使用joigoose来完成

这就是我的商业模式

代码语言:javascript
运行
复制
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const Joigoose = require('joigoose')(mongoose);
const Joi = require('@hapi/joi');

// Define collection and schema for Business

var joiSchema = Joi.object({
  model: Joi.string().alphanum().min(2).max(255).trim().required(),
  brand: Joi.string().alphanum().min(2).max(255).trim().required(),
  price: Joi.number().positive(),
  photo: Joi.string().max(255).trim()
})

var Business = new Schema(Joigoose.convert(joiSchema))

module.exports = mongoose.model('Business', Business);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56069990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档