1 提示:node express-session deprecated undefined saveUninitialized option; provide saveUninitialized option
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
app.use(session({
secret:settings.cookieSecret,
key:settings.db,
cookie:{maxAge:1000*60*60*24*30},
store:new MongoStore({
db:settings.db,
host:settings.host,
port:settings.port
}),
resave:false,
saveUninitialized:true
}));
、、
example:
app.use(session({
secret: cookie_secret,
name: cookie_name,
store: sessionStore, // connect-mongo session store
proxy: true,
resave: true,
saveUninitialized: true
}));
Assuming you want to use true
for those options.
//这两行加上就OK了
此处重新安装,遇到的另一个问题如下:
\node_modules\connect-mongo\src\index.js:100
throw new Error('Connection strategy not found');
^
Error: Connection strategy not found
解决办法如下:
app.use(session({ secret: settings.cookieSecret, key: settings.db,//cookie name cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days resave: false, saveUninitialized: true, store: new MongoStore({ /*db: settings.db, host: settings.host, port: settings.port*/ url: 'mongodb://localhost/blog' }) }));
2
Failed to load c++ bson extension, using pure JS version
还是63行的
rm -rf node_modules
npm cache clean
npm install
DEBUG=blog:* npm start
提示:
{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' }
js-bson: Failed to load c++ bson extension, using pure JS version
处理方法:
找到 npm 的module mongodb ..node_modules\mongodb\node_modules\bson\ext\index.js
并并在catch块改变bson的js本版路径:
bson = require('../build/Release/bson');
变成
bson = require('../browser_build/bson');
ok了
3
/Users/denny/Desktop/nodejs/blog/node_modules/mongodb/lib/mongodb/connection/base.js:246
throw message;
^
TypeError: Cannot read property 'user' of undefined
查查connect-mongo 版本,我系统里是1.1.0,
package.json里比这个低很多,改正后这个现象OK
npm install connect-mongo
blog@0.0.0 /Users/denny/Desktop/nodejs/blog
└─┬ connect-mongo@1.1.0
mongodb版本升级
更新Homebrew的package数据库,在Mac的终端中输入:
$ brew update
然后耐心等待,这个没有任何显示,估计要几分钟,取决于网络的速度。然后就列出了一大堆东西,就可以进行后续步骤了。
开始安装MongoDb
启动MongoDb
上面最后提示的直接启动MongoDb的方法.
mongod —config /usr/local/etc/mongod.conf
mongo --version
3.2.3
更改package.json
"mongodb": "3.2.3",
-----
## 4
TypeError: Cannot call method 'slice' of null
node app.js
Express server listening on port 3000
/Users/denny/Desktop/nodejs/blog/node_modules/mongodb/lib/utils.js:98
process.nextTick(function() { throw err; });
^
TypeError: Cannot read property 'slice' of null
at convert_tree_to_html (/Users/denny/Desktop/nodejs/blog/node_modules/markdown/lib/markdown.js:1556:20)
at Object.toHTMLTree (/Users/denny/Desktop/nodejs/blog/node_modules/markdown/lib/markdown.js:112:14)
at Object.toHTML (/Users/denny/Desktop/nodejs/blog/node_modules/markdown/lib/markdown.js:82:22)
at /Users/denny/Desktop/nodejs/blog/models/post.js:89:33
at Array.forEach (native)
应该docs是null,查询失败,应该是,js出这种错误一般就是因为调用slice的对象为null
查一下数据库,doc.post这个可能是null的 我遇到这样的问题就是这样的
修改如下:
docs.forEach(function(doc){
if(doc.post){
doc.post = markdown.toHTML(doc.post);
}
});
74行执行之前加个判断即可. 报错是提示doc.post为null导致后续出错
---
5
/Users/denny/Desktop/nodejs/blog/node_modules/mongodb/lib/utils.js:98
process.nextTick(function() { throw err; });
^
TypeError: Cannot read property 'forEach' of undefined
at /Users/denny/Desktop/nodejs/blog/models/post.js:141:23
at handleCallback (/Users/denny/Desktop/nodejs/blog/node_modules/mongodb/lib/utils.js:96:12)
原码如下://解析 markdown 为 html
doc.post = markdown.toHTML(doc.post);
doc.comments.forEach(function (comment) {
if(comment.content){
comment.content = markdown.toHTML(comment.content);
}
});
callback(null, doc);//返回查询的一篇文章
--注明: 原来明明是好好的,现在跑出问题来了,最重要的是,这个代码没错,但出错的表面现象指到这里,我顺着前面的思路去查了下数据库,结果post还真是空的
{ "_id" : ObjectId("56d03945281855a6033143cc"), "name" : "1", "head" : "7", "time" : { "date" : ISODate("2016-02-26T11:38:45.002Z"), "year" : 2016, "month" : "2016-2", "day" : "2016-2-26", "minute" : "2016-2-26 19:38" }, "title" : "8", "tags" : null, "post" : null, "comments" : [ ], "reprint_info" : { }, "pv" : 3 }
我重新发布一个文章,有post的,然后程序就正常了,这个提醒我自己,程序的健壮性有多少重要,我进展比较慢一直卡在各种报错上了。
加油
6 练习文章转发时,报以下错,但DB里有了新数据,重跑后,首页显示转发文章已经成功了
TypeError: Cannot read property 'name' of undefined
at /Users/denny/Desktop/nodejs/blog/routes/index.js:359:39
at /Users/denny/Desktop/nodejs/blog/models/post.js:476:11
index.js 前后段为
app.get('/reprint/:name/:day/:title', checkLogin);
app.get('/reprint/:name/:day/:title', function (req, res) {
Post.edit(req.params.name, req.params.day, req.params.title, function (err, post) {
if (err) {
req.flash('error', err);
return res.redirect(back);
}
var currentUser = req.session.user,
reprint_from = {name: post.name, day: post.time.day, title: post.title},
reprint_to = {name: currentUser.name, head: currentUser.head};
Post.reprint(reprint_from, reprint_to, function (err, post) {
if (err) {
req.flash('error', err);
return res.redirect('back');
}
req.flash('success', '转载成功!');
var url = encodeURI('/u/' + post.name + '/' + post.time.day + '/' + post.title);
//跳转到转载后的文章页面
res.redirect(url);
});
});
});
post.js段为
//将转载生成的副本修改后存入数据库,并返回存储后的文档
collection.insert(doc, {
safe: true
}, function (err, post) {
mongodb.close();
if (err) {
return callback(err);
}
callback(err, post[0]);
});
直觉应该还是数据空指针的问题,我得想想如何用if来处理