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


4 回复

根据你提供的信息,“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-mongomongodb 包。如果没有安装,可以通过以下命令进行安装:

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 服务是否正在运行,并且可以从应用程序访问。

回到顶部