node.js - 指定的命名空间无效 Mongoose 保存集合
问题描述
我正在使用 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
解决方案
我花了一段时间来解决我的问题,但我终于做到了。
在您的 .env 文件中,删除 .env 中的引号MONGODB_URI
。
检查下面的示例
PORT=3000
MONGODB_URI=mongodb://localhost:27017/ecommerce
推荐阅读
- c++ - 当我使用 cin 输入错误的变量类型时会发生什么?
- laravel - 如何更新 laravel eloquent where 子句?
- tws - reqAllOpenOrders() 无法下载我帐户的数据
- powershell-2.0 - 执行后删除文件夹和脚本
- azure - Azure Log Analytics 未收集日志
- python - Django:具有通用视图的 reverse_lazy()
- android - 安卓短信验证API
- c# - 在 C# 中屏蔽字节数组
- r - 使用 R CMD 检查时避免检查“\notrun”示例
- c - 为什么我的 C http 请求会导致非法指令:4