已完成的功能:用户的注册登录,文章的发表删除修改评论,技术栈bootstrap+express+mogoose

新get的知识点

ejs

一种html模板的渲染方式

1
2
3
<%=title%> 渲染title这个变量
<%-title%> 渲染并执行title变量中的代码
<%- include b%> 会把b.ejs的内容传进去

在express生成的项目中,app.js里定义了视图的渲染方式,如果视图想写html代码的话,就改变渲染方式

1
2
3
app.set('view engine', 'html');
//对html文件 渲染的时候委托ejs渲染方式渲染
app.engine('html',require('ejs').renderFile);

session

问题:用express-session会话中间件时,会产生一个req.session对象,产生的会话存在内存中,刷新就没了的。

用connect-mongo新建一个mongostore实例来保存会话到数据库,存储的是会话时的内容。
store设置session的存放位置

1
2
3
4
5
6
7
8
9
10
11
app.use(session({
secret: 'nodeBlog',
resave: false,
saveUninitialized: true,
//把会话信息存储到数据库中,以避免重启服务器时会话丢失
store:new MongoStore({
db:'nodeBlog',
host:'http://127.0.0.1',
port:27017,
url:'mongodb://127.0.0.1:27017/nodeBlog'
})

connect-flash

用来做页面提示的模块

  • 在app.js中添加一个中间件,得到一个req.flash对象
  • res.locals是渲染模板对象
    1
    2
    3
    4
    5
    6
    7
    8
    app.use(function(req,res,next){
    res.locals.user=req.session.user;
    //获取的是个数组 所以页面提示会一直出现 转成string
    res.locals.success=req.flash('success').toString();
    res.locals.error=req.flash('error').toString();
    console.log(res.locals);
    next();
    });

mongoose

1
mongoose.Promise = global.Promise;

零散

  • null的判断(登录查找用户的时候 返回的err是null)

    1
    2
    3
    4
    if (!err && typeof err === 'object') {
    req.flash('error', '登录失败');
    res.redirect('back');
    }