Nodejs指南操作,注册页面出错

Nodejs指南操作,注册页面出错

Express 500 ReferenceError: reg is not defined at exports.doReg (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\routes\index.js:58:31) at callbacks (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\lib\router\index.js:164:37) at param (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\lib\router\index.js:138:11) at pass (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\lib\router\index.js:145:5) at Router._dispatch (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\lib\router\index.js:173:5) at Object.router (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\lib\router\index.js:33:10) at next (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\node_modules\connect\lib\proto.js:193:15) at Object.handle (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\app.js:65:6) at next (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\node_modules\connect\lib\proto.js:193:15) at next (C:\Users\Administrator.B45N8CRM69I280E\Desktop\weiyun\NodeJs\UED\node_modules\express\node_modules\connect\lib\middleware\session.js:315:9)


报错如上提示,我注册写的代码如下: exports.reg = function(req, res){ res.render(‘reg’, { title: ‘用户注册’, user : req.session.user, success : req.flash(‘success’).toString(), error : req.flash(‘error’).toString() }); };

exports.doReg = function(req, res){ //检查密码 if (req.body[‘password-repeat’] != req.body[‘password’]) { req.flash(‘error’, ‘两次输入的密码不一致’); return res.redirect(’/reg’); }

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

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

//检查用户名是否已经存在 User.get(newUser.name,function(err,user){ if(user) err = ‘用户名已经存在’; 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 = new newUser; req.flash(‘success’,‘注册成功’); res.redirect(’/’); }); });

};

代码都是按照书上的搞,但是注册这块还有flash(error)都没报错,坑爹很,求各位大神解答啊。


4 回复

根据你提供的错误信息 ReferenceError: reg is not defined 和代码片段,问题出在 doReg 函数中。具体来说,你在尝试访问 req.body.password 时使用了 reg.body.password,这显然是错误的。

让我们修复这个问题,并提供一个更简洁、正确的版本。

修复后的代码

const crypto = require('crypto'); // 引入crypto模块用于密码加密
const User = require('./models/User'); // 假设User模型在这里定义

exports.reg = function(req, res) {
    res.render('reg', {
        title: '用户注册',
        user: req.session.user,
        success: req.flash('success').toString(),
        error: req.flash('error').toString()
    });
};

exports.doReg = function(req, res) {
    // 检查密码
    if (req.body['password-repeat'] !== req.body['password']) {
        req.flash('error', '两次输入的密码不一致');
        return res.redirect('/reg');
    }

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

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

    // 检查用户名是否已经存在
    User.get(newUser.name, function(err, user) {
        if (user) {
            req.flash('error', '用户名已经存在');
            return res.redirect('/reg');
        }

        if (err) {
            req.flash('error', err.message);
            return res.redirect('/reg');
        }

        // 如果不存在则新增用户
        newUser.save(function(err) {
            if (err) {
                req.flash('error', err.message);
                return res.redirect('/reg');
            }

            req.session.user = newUser;
            req.flash('success', '注册成功');
            res.redirect('/');
        });
    });
};

解释

  1. 修复变量引用:将 reg.body.password 改为 req.body.password
  2. 简化错误处理:将错误信息存储到 err.message 中,这样可以确保错误信息的一致性。
  3. 正确保存新用户:在保存新用户后,直接使用 newUser 而不是 new newUser(后者是语法错误)。

其他建议

  • 确保 User 模型已经正确导入,并且 User.get 方法能够正常工作。
  • 在实际生产环境中,考虑使用更安全的密码哈希算法,如 bcrypt 或者 argon2。
  • 确保所有路由和中间件都正确配置,以避免其他潜在的错误。

希望这些修改能帮助你解决注册页面的错误。如果还有其他问题,请随时提问!


此问题已解决,谢谢

这个怎么解决的啊  遇到一样的问题

根据错误信息 ReferenceError: reg is not defined,问题出在 doReg 函数中的 req.body.password 处。你使用了 reg.body.password 而不是 req.body.password

以下是修正后的代码:

const crypto = require('crypto');
const User = require('../models/user'); // 假设你已经在项目中定义了User模型

exports.reg = function(req, res) {
    res.render('reg', {
        title: '用户注册',
        user: req.session.user,
        success: req.flash('success').toString(),
        error: req.flash('error').toString()
    });
};

exports.doReg = function(req, res) {
    // 检查密码
    if (req.body['password-repeat'] !== req.body['password']) {
        req.flash('error', '两次输入的密码不一致');
        return res.redirect('/reg');
    }

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

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

    // 检查用户名是否已经存在
    User.get(newUser.name, function(err, user) {
        if (user) {
            err = '用户名已经存在';
        }
        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('/');
        });
    });
};

关键修改点:

  1. reg.body.password 改为 req.body.password
  2. newUser 的保存结果直接赋值给 req.session.user,而不是 new newUser

这样应该可以解决你的问题。如果还有其他问题,请确保你的路由和中间件配置正确,并且所有依赖项(如 User 模型)都已正确导入。

回到顶部