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') 引用。