Nodejs开发指南PDF(原有的下载地址失效了,想要pdf的朋友可以戳我):
http://wenku.baidu.com/link?url=RSy6donQq0guPBwwFZiWjPGJzzINmuierqZJr9ZMxfivll2gw2AtK9SNu_BGAsEBq5-WMyaZwzpQeDoyWM_t67eLOCsHOnhO5LF4onWva8y
项目完整代码:
https://github.com/chnmagnus/MBlog
一个基于express和mongodb 的简单微博项目,具体描述详见《Nodejs开发指南》。
网上也有一些该项目实现的代码,但是基本都是几年前的= =,许多代码都无法运行,各种search之后终于用各种最新版本的代码实现了这一项目,特此记录,分享。
简单说一下我的代码相对书中代码的变化:
1.ejs模板,layout.js被废弃,所以我使用include来提升代码的复用性。
将html代码的head及nav部分放在header.ejs中,将页脚部分放在footer.ejs中,然后在需要的部分使用<%- include header.ejs %>
的方式来进行引入。
2.app.METHOD(URL,function)
改为 app.use(URL,routes);
其中var routes = require('./routes/index');
3.书中使用req.flash()来实现服务器返回信息的显示,但是该方法在很久之前被废除。
解决方法一:
如果想继续使用req.flash(),需要require('connect-flash')模块(https://github.com/jaredhanso...),但这个模块也已三年没有更新过了= =,我并不确定是否能用。
解决方法二:
我是使用了res.locals.xxx;以及添加中间件的方式来进行信息的反馈。在需要返回信息给客户端的位置,例如登录成功时,使用如下代码:
res.lacals.result = '登录成功';
res.redirect('/');
配合app.js中的部分代码:
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
//...
app.use(session({
name: settings.name,
secret: settings.secret,
cookie: {
maxAge: 1000*60*30
},
store: new MongoStore({
url: settings.url
})
}));
//...
//这部分代码是放在对具体路径进行处理之前的
app.use(function (req,res,next) {
res.locals.user = req.session.user;
var result = req.session.result;
delete req.session.result;
res.locals.message = '';
if(result){
res.locals.message = result;
}
next();//中间件传递
});
当然,不要忘记修改ejs模板,在开头添加代码用来显示反馈信息:
<% if (message) { %>
<div class="alert alert-success">
<%= message %>
</div>
<% } %>
效果如下图:
4.使用了官方推荐的MongoClient方式来进行数据库的连接,关于这种方式的模块化,我也存有困惑,在segmentfault上提过问题= =,没有得到回答,自己摸索着解决的,可以看我的提问。
大概就是这样,共勉,一起努力= =