我现在是学习这个
https://github.com/nswbmw/N-blog/wiki/%E7%AC%AC1%E7%AB%A0--%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%8D%9A%E5%AE%A2
Node.js : 0.10.22 +
Express : 3.4.4 +
MongoDB : 2.4.8 +
有2个问题,在index.js下
我修改后的完整代码如下:
app.post('/signup', function (req, res) {
var username = req.body.username,
email = req.body.email,
password = req.body.password,
password_re = req.body['password-repeat'];
//昵称不能为空
if (username != '') {
req.flash('error', '昵称不能为空!');
return res.redirect('/signup');//返回注册页
}
//邮箱不能为空
if (email != '') {
req.flash('error', '邮箱不能为空!');
return res.redirect('/signup');//返回注册页
}
//密码不能为空
if (password != '') {
req.flash('error', '邮箱不能为空!');
return res.redirect('/signup');//返回注册页
}
//检验用户两次输入的密码是否一致
if (password_re != password) {
req.flash('error', '两次输入的密码不一致!');
return res.redirect('/signup');//返回注册页
}
//生成密码的 md5 值
var md5 = crypto.createHash('md5'),
password = md5.update(req.body.password).digest('hex');
var newUser = new User({
username: req.body.username,
password: password,
email: req.body.email
});
//检查用户名是否已经存在
User.get(newUser.username, function (err, user) {
if (user) {
req.flash('error', '用户已存在!');
return res.redirect('/signup');//返回注册页
}
//如果不存在则新增用户
newUser.save(function (err, user) {
if (err) {
req.flash('error', err);
return res.redirect('/signup');//注册失败返回主册页
}
req.session.user = user;//用户信息存入 session
req.flash('success', '注册成功!');
res.redirect('/');//注册成功后返回主页
});
});
//检查用户名是否已经存在
User.get(newUser.email, function (err, user) {
if (user) {
req.flash('error', '邮箱已存在!');
return res.redirect('/signup');//返回注册页
}
//如果不存在则新增用户
newUser.save(function (err, user) {
if (err) {
req.flash('error', err);
return res.redirect('/signup');//注册失败返回主册页
}
req.session.user = user;//用户信息存入 session
req.flash('success', '注册成功!');
res.redirect('/');//注册成功后返回主页
});
});
});
第一:其中下面代码是我新加的,是想用来判断注册不能为空,下面代码好像没用,但是我输入一个昵称后,好像就能判断了
//昵称不能为空
if (username != '') {
req.flash('error', '昵称不能为空!');
return res.redirect('/signup');//返回注册页
}
//邮箱不能为空
if (email != '') {
req.flash('error', '邮箱不能为空!');
return res.redirect('/signup');//返回注册页
}
//密码不能为空
if (password != '') {
req.flash('error', '邮箱不能为空!');
return res.redirect('/signup');//返回注册页
}
第二:我像再判断数据库是不是有邮箱了,句加了一段
//检查用户名是否已经存在
User.get(newUser.email, function (err, user) {
if (user) {
req.flash('error', '邮箱已存在!');
return res.redirect('/signup');//返回注册页
}
//如果不存在则新增用户
newUser.save(function (err, user) {
if (err) {
req.flash('error', err);
return res.redirect('/signup');//注册失败返回主册页
}
req.session.user = user;//用户信息存入 session
req.flash('success', '注册成功!');
res.redirect('/');//注册成功后返回主页
});
});
前面一个默认的,是判断昵称,这个是判断邮箱,这样新加好像不可,应该怎么加2个
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
node的IO都是异步,像
user.get
这种数据库查询,是异步操作,你的例子中,有查询用户名,和邮箱两个操作。这两个都是异步操作,你如果不用其他的库的话。在node中,一般的做法是callback 套 callback,即在
user.get useranme
的callback 函数里写user.get email
的逻辑大概是这个样子:
这样的话就会造成callback hell
一个典型的callback hell
可以使用其他的库来简化异步编程。推荐 async.js
https://github.com/caolan/async
用aysnc的话,这个逻辑可以这样写
翻译下:如果昵称不为空,则报错“昵称不能为空”。
另外,nodejs是异步回调的,下一个逻辑总是要写在前一个逻辑的回调中,而不是平铺着往下写。也就是需要不断嵌套嵌套嵌套直到最后返回res.end 。
楼主你好,我也在学习那个教程,但是遇到了req.flash() requires sessions这个问题,能说一下你怎么解决的吗?