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、最后运行的时候,报了下面这个东西:
然后想请教一下大神们,这个问题该怎么去解决?困扰我一上午了。。。
嗯,,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();
});
使用express4.x版和Jade模板重写《nodejs开发指南》微博实例 https://cnodejs.org/topic/53f23e198f44dfa35129c43b 这个版本我跑了下,和你一样的错误。
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(); });
@hu1991die 这个博客例子 在express 与 mongodb 版本迭代的过程中出来了很多问题。express mongodb 都是最新版本的情况下,这个例子肯定跑步起来。虽然这个例子在以前是个很不错的入门练习。但是,我最近在ubuntu下配置最新版本的 express mongodb环境里,许多东西都变了,包括mongodb的连接方式。具体参看官网及资料。 个人建议:先配置好最新版本的node npm express mongodb 等环境下写个简单的数据库连接测试和数据读取,然后再参看这个例子的结构。