https://github.com/nswbmw/N-blog/wiki/ 遇到的坑


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了


此处重新安装,遇到的另一个问题如下:

express 4.0 connect-mongo 运行时报错
  个人用的是express 4.0,在使用connect-mongo时候出现如下错误:
\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'
  })
}));



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


$ brew install mongodb

mongod --config /usr/local/etc/mongod.conf

启动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来处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值