hahaha
N-blog CHAPTER #2: MarkDown

从其他Branch合并过来，将多个commits合并成一个commit, 并修改commit message

查看commits列表
$ git log --pretty=oneline

合并commits成一个commit, 数字3表示需要合并的commits数量
$ git rebase --interactive HEAD~3

将跳出来的文本编辑器中的需要合并的commits前面的pick改成s, 代表squash, 如下:
pick b76d157 previous commit
s c59f218 commit need to be meld
s a931ac7 commit need to be meld
保存关闭文本编辑器

等待...跳出一个新的文本编辑器, 修改commit message(所有非#号开头的行都是commit message, 其中第一个非#号开头的行是message title, 后面非#号开头的行都是message body), 保存关闭.

等待...所有的commits合并成一个新的commit并带有新的commit message.

到此可以利用 $ git cherry-pick [SHA1] 或者 Merge 将该commit合并到目标Branch中.
N-blog CHAPTER #3: File Upload

Markdown 中图片引用语法:
![](/images/filename.png)

上述静态地址`/images/filename.png`的全URL为`http://domainName:Port/images/filename.png`
所有位于nodeServer/public下的文件都是静态文件, 可以这样访问(权限设置?)
N-blog CHAPTER #4: Article List and Detail with Mongoose

全部改造为mongoose方式连接数据库

一定要注意mongoose.Schema和实际赋值数据完全对应, 如果需要设置嵌套的复杂类型对象, 有两种方式:
http://mongoosejs.com/docs/schematypes.html

mongoose连接数据库, 只需要在程序开头连接一次, 如果有多个库需要连接, 使用createConnection方法
N-blog CHAPTER #5: Article Edit & Delete

使用sha1代替md5

$ npm run-script win 命令可以启动package.json中scripts下的win脚本

form表单里面被disabled掉的input(<input name="title" disabled="disabled">)的内容不会被提交

mongoose.model.update, mongoose.model.remove

备忘录: req.session.user用于判断用户是否在线，设置为null即为离线
N-blog CHAPTER #6: Article Comments

在其他model.js中(如comment.js)获取Post model:
var postModel = mongoose.model('Post');
// 前提是Post model已经创建(这里已经在post.js中创建, 而post.js早于comment.js被调用)