1、package.json文件: { “name”: “blog”, “version”: “0.0.0”, “private”: true, “scripts”: { “start”: “node ./bin/www” }, “dependencies”: { “body-parser”: “~1.12.4”, “cookie-parser”: “~1.3.5”, “debug”: “~2.2.0”, “ejs”: “~2.3.1”, “express”: “~4.12.4”, “morgan”: “~1.5.3”, “serve-favicon”: “~2.2.1”, “mongodb”: “*”, “express-session”: “1.9.1”, “connect-mongo”: “0.4.1”, “connect-flash”: “0.1.1” } }
2、app.js文件: var express = require(‘express’); var path = require(‘path’); var favicon = require(‘serve-favicon’); var logger = require(‘morgan’); var cookieParser = require(‘cookie-parser’); var bodyParser = require(‘body-parser’);
var routes = require(’./routes/index’); //引入settings.js文件 var settings = require(’./settings’);
//引入flash(connect-flash)模块,flash是一个可以存储特定信息,显示完成后会被清除的模块 var flash = require(‘connect-flash’); //这两个模块可以将 cookie 信息保存到 mongodb 中。 var session = require(‘express-session’); var MongoStore = require(‘connect-mongo’)(session);
var app = express();
// view engine setup app.set(‘port’, process.env.PORT || 3000); app.set(‘views’, path.join(__dirname, ‘views’)); app.set(‘view engine’, ‘ejs’);
// uncomment after placing your favicon in /public //app.use(favicon(__dirname + ‘/public/favicon.ico’)); app.use(logger(‘dev’)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(cookieParser()); app.use(session({ secret: settings.cookieSecret, key: settings.db,// cookie name cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days store: new MongoStore({ db: settings.db, host: settings.host, port: settings.port }) }));
//设置flash app.use(flash()); app.use(express.static(path.join(__dirname, ‘public’)));
routes(app);
app.listen(app.get(‘port’),function(){ console.log('Express server listening on port ’ + app.get(‘port’)); });
3、工程的结构如下:
4、最后运行的时候,报了下面这个东西:
然后想请教一下大神们,这个问题该怎么去解决?困扰我一上午了。。。
看上去程序应该能运行吧,只是bson的路径有问题。怎么会到…/build/Release/bson呢?你检查一下mongodb:npm ls mongodb,看看有没有什么问题
嗯,,mongodb貌似没什么问题:
然后,之前的那个express-session启动警告deprecated undefined resave option的问题已经解决了
跪了、、、、
但是,现在又出现了一个新的问题,貌似是那个session的问题
额,数据库连上了么?
Google了一下,好像是要MongoStore连上之后再设置express的中间件,楼主可以看下这个讨论: http://stackoverflow.com/questions/22698661/mongodb-error-setting-ttl-index-on-collection-sessions
核心代码是:
var sessionStore = new MongoStore({ url: 'someConnectionUrl', db: 'audio-drop' }, function(e) {
var cookieParser = express.cookieParser('waytoblue');
app.use(cookieParser);
app.use(express.session({
store: sessionStore
}));
app.listen();
});
@dean5277 嗯嗯,数据库是正常连接的。。。
@crystaldust 嗯嗯,好的,多谢!!!
@hu1991die 你这是2个版本的 mongodb 吗?
使用express4.x版和Jade模板重写《nodejs开发指南》微博实例 https://cnodejs.org/topic/53f23e198f44dfa35129c43b 这个版本我跑了下,和你一样的错误。
你说的是这个吗。。。额 我也不清楚呢!怎么会有两个啊。。。
@youarenode 额 哥们,问题现在解决了吗?
@hu1991die 我问的是你的nodejs连数据库是否正常
@dean5277 如何判断mongodb的连接 正常?mongodb 单独安装和 npm install mongodb 什么区别?
app.use(session({//session持久化配置
secret: "kvkenssecret",
key: "kvkenskey",
cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//超时时间
resave: false,
saveUninitialized: true,
store: new MongoStore({
db: "my_database",
host: "localhost",
port: 27017
})
}));
@youarenode 你先把session代码注释了,然后尝试打开一次数据库看看 var MongoClient = require(‘mongodb’).MongoClient , assert = require(‘assert’);
var url = ‘’;//数据库地址 // Use connect method to connect to the Server MongoClient.connect(url, function(err, db) {
assert.equal(null, err); console.log(“Connected correctly to server”);
db.close(); });
@dean5277 我写了存为mongo.js 运行起来 报错
你把项目传到git上一份,大家可以直接调试问题
@youarenode 对啊,你还是把项目上传一下吧,你肯定没有安装mongodb的模块啊。。
我怀疑是 数据库版本问题
@hu1991die 这个博客例子 在express 与 mongodb 版本迭代的过程中出来了很多问题。express mongodb 都是最新版本的情况下,这个例子肯定跑步起来。虽然这个例子在以前是个很不错的入门练习。但是,我最近在ubuntu下配置最新版本的 express mongodb环境里,许多东西都变了,包括mongodb的连接方式。具体参看官网及资料。 个人建议:先配置好最新版本的node npm express mongodb 等环境下写个简单的数据库连接测试和数据读取,然后再参看这个例子的结构。
好了 最新的mongo连接方式变了,版本升到了3.0.3
有一步是下载安装mongodb, 然后在mongodb文件夹里再新建一个blog文件夹, 然后cd 到你的mongoInstallFolder 运行 mongod --dbpath blog/ 这样启动了mongo之后,数据库成功了会说 “waiting for connections on port 27017” 一类的。 我之前遇到有关session和ttl多半是因为connect-mongo不兼容。我升级到了0.7.0就没出错了。