Nodejs 开发指南microblog——Require MongoStore option db missing
Nodejs 开发指南microblog——Require MongoStore option db missing
弄了一天不知道怎么解决这个错误,求解救,感激万分。。。。 源代码:settings: module.exports={ cookieSecret:‘microblogbyvoid’, db:‘microblog’, host:‘localhost’, }; app.js中MongoStore var MongoStore=require(‘connect-mongo’)(express); app.use(express.session({ secret:settings.cookieSecret, store:new MongoStore({ db:settings.db }) })); db.js var settings=require(’…/settings’); var Db=require(‘mongodb’).Db; var Connection=require(‘mongodb’).Connection; var Server=require(‘mongodb’).Server; module.exports=new Db(settings.db,new Server(settings.host,Connection.DEFAULT_PORT,{}),{w:1});
根据你提供的信息,“Require MongoStore option db missing” 这个错误提示意味着在使用 MongoStore
时没有正确地传递 db
选项。这可能是因为 db
的配置或引用方式存在问题。下面我将提供一个简化的版本来帮助你理解并解决这个问题。
解决方案
首先,确保你的 settings
模块正确导出 db
变量,并且在 MongoStore
中正确引用它。
1. 设置文件 (settings.js
)
确保 settings.js
文件中的 db
配置正确无误:
// settings.js
module.exports = {
cookieSecret: 'microblogbyvoid',
db: 'microblog', // 确保这里与 MongoDB 数据库名称一致
host: 'localhost'
};
2. 应用程序入口文件 (app.js
)
确保在应用中正确地初始化了 express-session
并且传递了正确的 MongoStore
配置:
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session); // 使用 connect-mongo 包
const settings = require('./settings');
const app = express();
app.use(session({
secret: settings.cookieSecret,
store: new MongoStore({
url: `mongodb://${settings.host}:27017/${settings.db}`
})
}));
// 其他中间件和路由配置
app.listen(3000, () => {
console.log('App is running on port 3000');
});
3. 数据库连接文件 (db.js
)
确保你的数据库连接文件正确设置:
const settings = require('./settings');
const { MongoClient } = require('mongodb');
async function connect() {
const client = await MongoClient.connect(`mongodb://${settings.host}:27017/${settings.db}`, { useNewUrlParser: true, useUnifiedTopology: true });
return client.db(settings.db);
}
module.exports = connect();
总结
- 确保
settings.js
中的db
配置正确。 - 在
app.js
中,使用url
属性直接指定 MongoDB 的连接字符串,而不是通过单独的db
属性。 - 使用最新的
mongodb
包(如mongodb
npm 包)进行数据库连接,避免使用过时的方法。
通过上述步骤,你应该能够解决 Require MongoStore option db missing
错误。如果问题仍然存在,请检查 MongoDB 是否正在运行以及配置是否正确。
请说明你用的是express吗?express版本是3.x还是4.x? express 4 版本与express 3 有很大区别。 或者请你参考我的文章:使用express4.x版和Jade模板重写《nodejs开发指南》微博实例
我的文章:使用express4.x版和Jade模板重写《nodejs开发指南》微博实例 ,使用3个js来控制mongodb
settings.js的代码: //定义数据库 module.exports = { cookieSecret: ‘microblogtony2014’, db: ‘blog’, host: ‘localhost’, };
db.js代码: //链接数据库 var settings = require(’…/settings’), Db = require(‘mongodb’).Db, Connection = require(‘mongodb’).Connection, Server = require(‘mongodb’).Server; module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {}), {safe: true});
user.js代码: //数据库操作 var mongodb = require(’./db’);
function User(user) { this.name = user.name; this.password = user.password; };
module.exports = User;
//存入Mongodb的文档 User.prototype.save = function save(callback) { var user = { name: this.name, password: this.password, };
mongodb.open(function(err, db) { if (err) { return callback(err); } //读取users集合 db.collection(‘users’, function(err, collection) { if (err) { mongodb.close(); return callback(err); } // 为name属性添加索引 // collection.ensureIndex(‘name’, {unique: true});
//写入user文档
collection.insert(user, {safe: true}, function(err, user) {
mongodb.close();
callback(err, user);
});
});
});
}
User.get = function get(username, callback) { mongodb.open(function(err, db) { if (err) { return callback(err); } //读取users集合 db.collection(‘users’, function(err, collection) { if (err) { mongodb.close(); return callback(err); } //查找name属性为username的文档 collection.findOne({name: username}, function(err, doc) { mongodb.close(); if (doc) { //封装文档为User对象 var user = new User(doc); callback(err, user); } else { callback(err, null); } }); }); }); };
根据你的描述,问题出在 MongoStore
的配置上。错误提示 Require MongoStore option db missing
表明 MongoStore
期望一个数据库连接选项,但未能找到。
下面是解决这个问题的一些步骤和示例代码:
1. 安装依赖包
确保你已经安装了 connect-mongo
和 mongodb
包。如果没有安装,可以通过以下命令进行安装:
npm install connect-mongo mongodb
2. 修改 app.js
中的 MongoStore
配置
确保在创建 MongoStore
实例时正确传递了 db
参数。以下是修改后的代码:
var express = require('express');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
// 导入设置
var settings = require('./settings');
var app = express();
app.use(session({
secret: settings.cookieSecret,
store: new MongoStore({
url: `mongodb://${settings.host}:27017/${settings.db}`
}),
resave: false,
saveUninitialized: true
}));
// 其他中间件和路由配置
3. 确保 db.js
正确配置数据库连接
确保 db.js
文件正确配置了数据库连接:
var settings = require('./settings');
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
module.exports = new Db(
settings.db,
new Server(settings.host, 27017, {}),
{ w: 1 }
);
4. 检查 settings.js
配置
确保 settings.js
文件中的配置是正确的:
module.exports = {
cookieSecret: 'microblogbyvoid',
db: 'microblog',
host: 'localhost'
};
通过以上步骤,你应该能够解决 Require MongoStore option db missing
错误。如果仍然有问题,请检查 MongoDB 服务是否正在运行,并且可以从应用程序访问。