【问题标题】:Invalid Namespace specified Mongoose save collection指定的命名空间无效 Mongoose 保存集合
【发布时间】:2020-06-09 03:41:28
【问题描述】:

我正在使用 expressjs、mongoose 和 ejs 模板引擎创建一个应用程序。 我在保存收藏时遇到了以下提到的问题:

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

这是我的入口脚本 app.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();
    });

这些是文件 config.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
            });
        });
};

如果在我的 app.js 中硬编码了 mongodb url,那么它就会开始工作(修改 app.js 以便工作 mongoose 保存)

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();
    });

如何动态使用 .env 文件中的 mongo db url

【问题讨论】:

    标签: node.js mongodb express mongoose env-file


    【解决方案1】:

    我花了一段时间才解决我的问题,但我终于解决了。

    在您的 .env 文件中,删除 MONGODB_URI 中的引号。

    查看下面的示例

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

    【讨论】:

      【解决方案2】:

      您遇到错误的原因:
      这仅仅是因为您在 .env 文件中编写 MongoDB URI 的方式,即 MONGODB_URI="mongodb://localhost:27017/ecommerce"; dotEnv 包会将MONGODB_URI 的值解析为mongodb://localhost:27017/ecommerce";,注意最后的双引号(") 和分号(;),它们不应该在那里并且这就是导致错误的原因。

      修复:
      您需要做的就是删除分号,一切都会好起来的:MONGODB_URI="mongodb://localhost:27017/ecommerce"

      【讨论】:

      • 不客气@VikasKumar。由于该解决方案有效,我想您可以接受答案。
      • 以上评论不会让其他查看此答案的人感到困惑,看来提问者删除了我出于某种原因回复的“谢谢”评论。
      猜你喜欢
      • 2014-09-21
      • 1970-01-01
      • 2014-05-18
      • 2020-11-11
      • 2019-02-25
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多