Я не понимаю, как использовать метод findOrCreate с mongoose - PullRequest
0 голосов
/ 10 ноября 2018

По этой схеме cap.model.js:

const mongoose = require('mongoose');
const findOrCreate = require ('mongoose-findorcreate')
const Schema = mongoose.Schema;

let CapSchema = new Schema ({
  title: {type: String},
  list: {type: Array}
});

CapSchema.plugin(findOrCreate);

module.exports = mongoose.model('Cap', CapSchema);

Я хочу получить данные из get ('/ url /: param1') со следующими данными:

  1. Найти документы, для которых список содержит param1, и вернуть их заголовки в массиве.

  2. Найдите документ с заголовком param1 и верните его список. Или, если он не существует, создайте документ. И в обоих случаях также вернуть его заголовок.

Тогда я хочу console.log: Заголовок (2) с одной стороны и массив, образованный массивом заголовков (1) и списком (2) с другой.

Мои проблемы в том, что я не могу найти или не понимаю метод findOrCreate (https://www.npmjs.com/package/mongoose-findorcreate) и какие аргументы мне нужно использовать.

На данный момент мой код выглядит так:

В route.js:

const express = require('express');
const router = express.Router();

const cap_controller = require('../controllers/cap.controller');

router.get('/:param1', cap_controller.cap_get);

module.exports = router;

В cap.controller.js:

const Cap = require('../models/cap.model');

const foc = Cap.findOrCreate({},
  function(err, cap) {
    console.log(req.params.word + ' has been created !', word.main);
    },
    'title list');

exports.cap_get = function (req, cb) {
  let capTitle = req.params.param1;
  cb(capTitle);
  };

И я застрял с непониманием, когда методу нужны аргументы и какие аргументы нужны функции обратного вызова.

1 Ответ

0 голосов
/ 10 ноября 2018

В вашем cap.controller.js много ошибок. Во-первых, почему метод foc находится за пределами cap_get? А во-вторых, вы никогда не вызываете метод foc, почему?

В вашем случае вы хотите проверить, существует ли Cap с заголовком, заданным в params, и если это не так, создайте его.

Вы можете просто добиться этого следующим образом:

exports.cap_get = function (req, res, next) {
  let capTitle = req.params.param1;

  Cap.findOrCreate({ title: capTitle }, function(err, cap) {
    if (err) return next(err);

    console.log(capTitle + ' has been created !');

    res.status(200).json({ title: capTitle });
  });
};

cap_get - это просто экспресс-обратный вызов со своей подписью (req, res, next), а первый параметр findOrCreate является первичным ключом, поэтому здесь, если нет никаких заглавных букв с этим ключом (заголовком), он создаст его иначе он вернет документ.

Вы должны убедиться, что заголовок шапки уникален, чтобы избежать потенциальных проблем:

let CapSchema = new Schema ({
  title: {type: String, unique: true},
  list: {type: Array}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...