使用nodejs+mongodb搭建简单个人博客时遇到的问题
发布于 9 年前 作者 hu1991die 18875 次浏览 最后一次编辑是 8 年前 来自 问答

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、工程的结构如下: 2.png

4、最后运行的时候,报了下面这个东西: QQ截图20150529130416.png

然后想请教一下大神们,这个问题该怎么去解决?困扰我一上午了。。。

21 回复

看上去程序应该能运行吧,只是bson的路径有问题。怎么会到…/build/Release/bson呢?你检查一下mongodb:npm ls mongodb,看看有没有什么问题

@crystaldust

嗯,,mongodb貌似没什么问题: 2.png

然后,之前的那个express-session启动警告deprecated undefined resave option的问题已经解决了 1.jpg

跪了、、、、

但是,现在又出现了一个新的问题,貌似是那个session的问题 3.png

额,数据库连上了么?

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 嗯嗯,数据库是正常连接的。。。

2.png

@crystaldust 嗯嗯,好的,多谢!!!

@hu1991die 你这是2个版本的 mongodb 吗?

使用express4.x版和Jade模板重写《nodejs开发指南》微博实例 https://cnodejs.org/topic/53f23e198f44dfa35129c43b 这个版本我跑了下,和你一样的错误。 QQ截图20150529174644.jpg

@youarenode 4.png

你说的是这个吗。。。额 我也不清楚呢!怎么会有两个啊。。。

@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 QQ图片20150608103156.png 我写了存为mongo.js 运行起来 报错

你把项目传到git上一份,大家可以直接调试问题

@youarenode 对啊,你还是把项目上传一下吧,你肯定没有安装mongodb的模块啊。。

我怀疑是 数据库版本问题

@hu1991die 这个博客例子 在express 与 mongodb 版本迭代的过程中出来了很多问题。express mongodb 都是最新版本的情况下,这个例子肯定跑步起来。虽然这个例子在以前是个很不错的入门练习。但是,我最近在ubuntu下配置最新版本的 express mongodb环境里,许多东西都变了,包括mongodb的连接方式。具体参看官网及资料。 个人建议:先配置好最新版本的node npm express mongodb 等环境下写个简单的数据库连接测试和数据读取,然后再参看这个例子的结构。

好了 最新的mongo连接方式变了,版本升到了3.0.3 QQ截图20150608182714.jpg

有一步是下载安装mongodb, 然后在mongodb文件夹里再新建一个blog文件夹, 然后cd 到你的mongoInstallFolder 运行 mongod --dbpath blog/ 这样启动了mongo之后,数据库成功了会说 “waiting for connections on port 27017” 一类的。 我之前遇到有关session和ttl多半是因为connect-mongo不兼容。我升级到了0.7.0就没出错了。

回到顶部