Указано неверное пространство имен Mon goose сохранить коллекцию - PullRequest
0 голосов
/ 25 февраля 2020

Я создаю приложение с использованием шаблонизатора expressjs, mon goose и e js. При сохранении коллекции я сталкиваюсь с упомянутой ниже проблемой:

{"message":"Invalid namespace specified 'ecommerce\";.roleresources'"}

Это мое приложение-сценарий ввода. js файл:

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const expressLayout = require('express-ejs-layouts');

const config = require('./config');
const adminRoutes = require('./routes/admin');

const app = express();

// set the view engine to ejs
app.set('view engine', 'ejs');
app.set('views', 'views');

app.set('layout', 'layout/shop');
app.set("layout extractScripts", true)
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressLayout);
app.use(express.static(path.join(__dirname, 'public')));

app.use('/admin', adminRoutes);

mongoose.Promise = global.Promise;
mongoose
    .connect(config.mongodb_uri, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex:true } )
    .then(result => {
        console.log(result);
        app.listen(config.port || 3000);
    })
    .catch(err => {
        process.exit();
    });

Это файл конфигурации. js файл :

const dotenv = require('dotenv');

dotenv.config();
module.exports = {
    port:process.env.PORT,
    mongodb_uri: process.env.MONGODB_URI
}

и это мой файл .env:

PORT=3000
MONGODB_URI="mongodb://localhost:27017/ecommerce";

, а файл модели:

const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const roleResourceSchema = Schema({
    name:{
        type:String,
        required:true
    },
    code:{
        type:String,
        required:true
    },
    url:{
        type:String,
        required:true
    }
});

roleResourceSchema.index({name:1, code:1,url:1}, {unique:true});

module.exports = mongoose.model('RoleResource', roleResourceSchema);

и, наконец, мой контроллер:

const RoleResource = require('../model/roleResource');

exports.getLogin = (req, res, next) => {

    const resource = new RoleResource({
        name:"All",
        code:"all",
        url:"*",
    });

    resource.save()
        .then(data => {
            res.send(data);
        }).catch(err => {
            res.status(500).send({
                message: err.message
            });
        });
};

и если в моем приложении жестко задан URL-адрес mongodb. js, то он начинает работать (измененное приложение. js для работы в пн goose сохранить)

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const expressLayout = require('express-ejs-layouts');

const config = require('./config');
const adminRoutes = require('./routes/admin');

const app = express();

// set the view engine to ejs
app.set('view engine', 'ejs');
app.set('views', 'views');

app.set('layout', 'layout/shop');
app.set("layout extractScripts", true)
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressLayout);
app.use(express.static(path.join(__dirname, 'public')));

app.use('/admin', adminRoutes);

mongoose.Promise = global.Promise;
mongoose
    .connect("mongodb://localhost:27017/ecommerce", { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex:true } )
    .then(result => {
        console.log(result);
        app.listen(config.port || 3000);
    })
    .catch(err => {
        process.exit();
    });

Как я могу динамически использовать mon go db url из моего .env файла

1 Ответ

0 голосов
/ 25 февраля 2020

Причина возникновения ошибки:
Это просто из-за того, как вы пишете URI MongoDB в файле .env, т.е. MONGODB_URI="mongodb://localhost:27017/ecommerce"; Пакет dotEnv будет анализировать значение для MONGODB_URI как mongodb://localhost:27017/ecommerce";, обратите внимание на двойную кавычку (") и точку с запятой (;) в конце, они не должны быть там, и это является причиной ошибки.

Исправление:
Все, что вам нужно сделать, это удалить точку с запятой, и все должно быть в порядке: MONGODB_URI="mongodb://localhost:27017/ecommerce"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...