Page 121 - Node.js开发指南
P. 121

114  第 5 章  使用 Node.js 进行 Web 开发


                   //生成口令的散列值
                   var md5 = crypto.createHash('md5');
                   var password = md5.update(req.body.password).digest('base64');

                   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);
                       return res.redirect('/reg');
                     }
                     //如果不存在则新增用户
                     newUser.save(function(err) {
                       if (err) {
                         req.flash('error', err);
                         return res.redirect('/reg');
                       }
                       req.session.user = newUser;
                       req.flash('success', '注册成功');
                       res.redirect('/');
                     });
                   });
                 });
                 这段代码用到了一些新的东西,我们一一说明。
                   req.body 就是 POST  请求信息解析过后的对象,例如我们要访问用户传递的
                   password 域的值,只需访问 req.body['password'] 即可。
                   req.flash 是 Express 提供的一个奇妙的工具,通过它保存的变量只会在用户当前
                   和下一次的请求中被访问,之后会被清除,通过它我们可以很方便地实现页面的通知
                   和错误信息显示功能。
                   res.redirect 是重定向功能,通过它会向用户返回一个 303 See Other 状态,通知
                   浏览器转向相应页面。
                   crypto 是 Node.js 的一个核心模块,功能是加密并生成各种散列,使用它之前首先
                   要声明 var crypto = require('crypto')。我们代码中使用它计算了密码的散
                   列值。
                   User 是我们设计的用户对象,在后面我们会详细介绍,这里先假设它的接口都是可
                   用的,使用前需要通过 var User = require('../models/user.js') 引用。
   116   117   118   119   120   121   122   123   124   125   126