Express / Node / Mongoose: почему в моем router.js не работает find () для коллекции? - PullRequest
0 голосов
/ 04 января 2019

Когда я пытаюсь выполнить «find» или «findOne» в моей коллекции Mongo (используя ExpressJS / Mongoose), я получаю сообщение об ошибке: "Ошибка типа: _Cardsets.Cardset.find (...). ForEach не является функцией" (Обратите внимание на дублирование названия коллекции, которая называется «наборы карт» (строчные и множественные) в базе данных.

из app.js

import express from 'express';
import path from 'path';
import cookeParser from 'cookie-parser';
import bodyParser from 'body-parser';
import ejs from 'ejs';
import expressValidator from 'express-validator';
import flash from 'connect-flash';
import session from 'express-session';
import passport from 'passport';
const LocalStrategy = require('passport-local').Strategy;
import mongoose from 'mongoose';
import index from './routes/index';
import users from './routes/users';
import mysets from './routes/mysets';
var ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn;

[...]

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/CRMDB', {
    useMongoClient: true
});
let db = mongoose.connection;

db.on("error", function (error) {
    console.log("fail--->" + error);
});
db.on("open", function () {
    console.log("connected");
});

const app = express();
const PORT = 3000;

[...]

app.use('/mysets/',mysets);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

от ./models/Cardsets.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const CardsetSchema = new Schema({
    _id: String,
    setTitle: String,
    minScore: Number,
    [...]
    dateModified: Date,
    results: Array
});

export const Cardset = mongoose.model('Cardset', CardsetSchema);

от ./routes/mysets.js

import express from 'express';
let router =  express.Router();
import { Cardset } from '../models/Cardsets';

router.get('/', function(req, res){
    var id = req.user._id;
    var dataset = [];
    Cardset.find({creator: id}).forEach(function(myDoc) {
       var tempData = {};
       tempData.setTitle = myDoc.setTitle;
       tempData._id = myDoc._id;
       tempData.language = myDoc.language;
       tempData.dateCreated = myDoc.dateCreated;
       dataset.push(tempData);
       });
       console.log("dataset = "+dataset);
    res.render('pages/mysets', {
       dataset: dataset
    });
});
export default router;

Я надеялся, что смогу передать объект данных, созданный из документов монго, на страницу клиента.

1 Ответ

0 голосов
/ 04 января 2019

Я думаю, вы должны использовать обещание в своем коде, как показано ниже:

router.get('/', function(req, res){
    var id = req.user._id;
    var dataset = [];

    Cardset.find({creator: id}).then((Docs) => {
       Docs.forEach((myDoc) => {
           var tempData = {};
           tempData.setTitle = myDoc.setTitle;
           tempData._id = myDoc._id;
           tempData.language = myDoc.language;
           tempData.dateCreated = myDoc.dateCreated;
           dataset.push(tempData);
       });
    });

    console.log("dataset = "+dataset);

    res.render('pages/mysets', {
    dataset: dataset
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...