Генерация массива объектов для insertMany в mon goose с express и узлом - PullRequest
0 голосов
/ 31 марта 2020

Я новичок в сообществе разработчиков и express. Я создаю приложение для обзора кафе в качестве любимого проекта. Я использую express framework mongoDB с mon goose. Я могу сохранить один объект в документе, но когда дело доходит до сохранения нескольких объектов, я не могу понять это. Я получаю ошибку проверки Проверка кафе не удалась: имя: Ошибка приведения к строке для значения "['Cafe X', 'Cafe Y']" "по пути" имя " для всех ключей. Затем я попробовал функцию insertMany, но затем я получаю сообщение об ошибке cafe.insertMany не является функцией . Я думаю, что я должен вставить кафе как массив объектов, но как я могу получить его в массив объектов? Может быть, кто-то может указать мне правильное направление?

Схема определяется в кафе следующим образом. js file:

const mongoose = require('mongoose');

const cafeSchema = new mongoose.Schema({
  name: {
    type: String,
    trim: true,
    required: true
  },
  chef: {
    type: String,
    trim: true
  },
  city: {
    type: String,
    required: true,
    max: 32,
    trim: true
  },
  rating: {
    type: Number,
    required: true
  },
  contactNumber: {
    type: String,
    trim: true,
    required: true
  }
});

module.exports = mongoose.model('Cafe', cafeSchema);

Файл маршрутов выглядит следующим образом:

var express = require('express');
var router = express.Router();
const cafeController = require('../controllers/cafeController');

/* GET home page. */
router.get('/', cafeController.addCafeGet);
router.post('/', cafeController.addCafePost);

module.exports = router;

Элемент cafeController работает следующим образом: он отлично работает для одного объекта:

const Cafe = require('../models/cafe');

exports.addCafeGet = (req, res) => {
  res.render('index', { title: 'Add Restourant' });
};

exports.addCafePost = async (req, res, next) => {
  try {
    const cafe = new Cafe(req.body);
    await cafe.save();
    res.json(cafe);
  } catch (error) {
    next(error);
  }
};

В html пользователь / администратор добавляет кафе. На более позднем этапе они смогут добавлять больше кафе одновременно, например, у меня их только два.

    form(action="", method="post")
      ul
        li
          input(type="text" name='name' placeholder='name')
        li
          input(type="text" name='city' placeholder='City')
        li
          input(type="text" name='chef' placeholder='Chef')
        li
          select#rating(name="rating")
            option(value="1") 1
            option(value="2") 2
            option(value="3") 3
            option(value="4") 4
            option(value="5") 5
        li
          input(type="text" name='contactNumber' placeholder='Contact number')
      ul
        li
          input(type="text" name='name' placeholder='name')
        li
          input(type="text" name='city' placeholder='City')
        li
          input(type="text" name='chef' placeholder='Chef')
        li
          select#rating(name="rating")
            option(value="1") 1
            option(value="2") 2
            option(value="3") 3
            option(value="4") 4
            option(value="5") 5
        li
          input(type="text" name='contactNumber' placeholder='Contact number')
        button(type="submit") SAVE

Я планирую использовать и интерфейс на другом этапе, но не правильно сейчас же.

1 Ответ

0 голосов
/ 01 апреля 2020

Могут быть и другие проблемы в том, чего вы пытаетесь достичь, но отметьте res.json(restourant). На что ссылается restourant?

Что-то подобное может работать в этом случае:

// cafeController
exports.addRestourantPost = async (req, res, next) => {
  try {
    const cafe = new Cafe(req.body);
    const savedCafe = await cafe.save();
    res.status(201).json(savedCafe.toJSON());
  } catch (error) {
    next(error);
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...