node.js express开发web问题

1、新建的layout.ejs,在里面使用了<%= title %>,但是在运行时提示title is not defined。

将title改为<%= locals.title %>即可

2、在使用session进行连接mongodb数据库时,出现错误 (引用http://winfan.net/662.html)

Error: Most middleware (like session) is no longer bundled with Express and must be installed separately.

在express 4.0之前的版本,像session之类的中间件是伴随express自动安装的,网上有的教程使用的express版本正是4.0之前的版本,所以在使用4.0及其之后版本的时候一定要注意这点。

用的时候不在使用express.session,而是直接使用session():

app.use(session({
    secret:setting.cookieSecret,
    key:setting.db,
    cookie:{maxAge:1000*60*60*24*30},
    store:new MongoStore({db:setting.db})
}));
 1 {
 2   "name": "appName",
 3   "version": "0.0.1",
 4   "private": true,
 5   "scripts": {
 6     "start": "node ./bin/www"
 7   },
 8   "dependencies": {
 9     "express": "~4.2.0",
10     "static-favicon": "~1.0.0",
11     "morgan": "~1.0.0",
12     "cookie-parser": "~1.0.1",
13     "body-parser": "~1.0.0",
14     "mongodb": "*",
15     "express-useragent": "*",
16     "connect": "*",
17     "cookie-session": "*",
18     "cookies": "*",
19     "express-session": "~1.0.4"
20   }
21 }

3、前端ejs页面访问session中内容

在app.js中插入如下代码:(在express早期版本中为helper,dynamicHelpers),注意下面代码要放在路由之前,否则不识别其中的变量

 1 app.use(function(req,res,next){  
 2     // res.locals.user = req.session ? req.session.user:'';  
 3     // res.locals.keyword = req.session ? req.session.keyword:'';  
 4 
 5     res.locals.user = req.session.user;
 6     res.locals.post = req.session.post;
 7     var error = req.flash('error');
 8     res.locals.error = error.length ? error : '';
 9     
10     var success = req.flash('success');
11     res.locals.success = success.length ? success : '';
12     next();  
13   });  

后端代码如下,

var newUser = new User({
  name: req.body.username,
  password: password,
});

//檢查用戶名是否已經存在
User.get(newUser.name, function(err, user) {
  if (user)
    err = 'Username already exists.';
  if (err) {
    // req.flash('error', err);
    console.log( err);
    return res.redirect('/reg');
  }
  //如果不存在則新增用戶
  newUser.save(function(err) {
    if (err) {
      // req.flash('error', err);
      req.session.error='用户不存在';
     console.log('error', err);
      return res.redirect('/reg');
    }
    req.session.user = newUser;
    // req.flash('success', '註冊成功');
    req.session.success='注册成功';
    console.log('注册成功');
    res.redirect('/');
  });
});

如果在前端ejs中访问User对象的name或password属性,可以使用<%= locals.user['name']%> <%= locals.user['password']%>

req.flash在express4.X后使用的话,需要单独安装,并引入。

原文地址:https://www.cnblogs.com/mebius4789/p/5040736.html