Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在.ejs模板中显示错误_Node.js_Handlebars.js_Ejs_Alert - Fatal编程技术网

Node.js 如何在.ejs模板中显示错误

Node.js 如何在.ejs模板中显示错误,node.js,handlebars.js,ejs,alert,Node.js,Handlebars.js,Ejs,Alert,因此,我将.hbs模板转换为.ejs模板,并尝试查看差异。我原以为转换也是一样的,但事实证明并非如此 我的代码正在运行。我可以注册用户,但没有显示错误。错误显示是我代码中的主要问题 这是.HBS版本的错误 {{#if message}} <h4 class="alert alert-danger mt-4">{{message}}</h4> {{/if}} //SignUp.js / SignIn.js <% if (error)

因此,我将.hbs模板转换为.ejs模板,并尝试查看差异。我原以为转换也是一样的,但事实证明并非如此

我的代码正在运行。我可以注册用户,但没有显示错误。错误显示是我代码中的主要问题

这是.HBS版本的错误

{{#if message}} 
    <h4 class="alert alert-danger mt-4">{{message}}</h4> 
{{/if}}
//SignUp.js / SignIn.js
<% if (error) { %>
    <h4 class="alert alert-danger mt-4">{{message}}</h4>
<% } %>
这是Routes文件夹-user.js

exports.signin = async (req, res) => {
    try {
        const {email, password} = req.body;
        
        if(!email || !password) {
            return res.status(400).render('shop/signin', {
                message: 'Please provide an email and/or password'
            });
        }
        
        con.query('SELECT * FROM users WHERE email = ?', [email], async (error, results) => {
            console.log(results);

            if(!results || !(await bcrypt.compare(password, results[0].password))) {
                res.status(401).render('shop/signin', {
                    message: 'Email or Password is incorrect'
                });
            }
            else {
                const id = results[0].id;

                const token = jwt.sign({ id }, process.env.JWT_SECRET, {
                    expiresIn: process.env.JWT_EXPIRES_IN
                });

                console.log("The token is: " + token);

                const cookieOptions = {
                    expires: new Date(
                        Date.now() = process.env.JWT_COOKIE_EXPIRES * 24 * 60 * 60 * 1000
                    ),
                    httpOnly: true
                }
                res.cookie('jwt', token, cookieOptions);
                res.status(200).redirect("shop/profile");                
            }
        });
    }
    catch(error) {
        console.log(error);
    }
}

exports.signup = (req, res) => {
    console.log(req.body);

    const {name, email, password, passwordConfirm} = req.body;

    con.query('SELECT email FROM users WHERE email = ?', [email], async (error, results) => {
        if(error) {
            console.log(error);
        }
        if(results.length > 0) {
            return res.render('shop/signup', {
                message: 'That email is already in use!'
            });
        }
        else if(password !== passwordConfirm) {
            return res.render('shop/signup', {
                message: 'Passwords do not match!'
            });            
        }

        let hashedPassword = await bcrypt.hash(password, 8);
        console.log(hashedPassword);

        con.query('INSERT INTO users SET ?', {name: name, email: email, password: hashedPassword}, (error, results) => {
            if(error) {
                console.log(error);
            }
            else {
                console.log(results);
                return res.render('shop/signup', {
                    message: 'User Registered!'
                });   
            }
        });
    });
}
router.post('/signup', authController.signup);
router.post('/signin', authController.signin);

module.exports = router;
领主 你可以用两种方法解决这个问题

1-本地消息
return res.send(“警报('Error Message');window.location='shop/sign';”)

2-如果您不想使用本地消息,请使用“flash”和“session”软件包 你可以用两种方法解决这个问题

1-本地消息
return res.send(“警报('Error Message');window.location='shop/sign';”)


2-如果您不想使用本地消息,请使用“flash”和“session”包!尽管在单击警报消息的“确定”后,它会显示一条错误消息,表示无法获取页面。请尝试以下代码
return res.send(“警报('error message');window.location='../../shop/sign';”
据我所知,您提供的路径错误。如果您可以将代码上载到github帐户,我可以从那里看到您的错误。我的错,您是对的。这是路径错误。我将位置从“shop/sign”更改为“/sign”现在它可以工作了,在显示警报消息后,它会重定向回页面。谢谢!我使用了它,它工作了!虽然在单击警报消息的“确定”后,它会显示一条错误消息,表示无法获取页面。请尝试此代码
返回res.send(“警报('error message');window.location='../../shop/sign'
据我所知,您提供的路径错误。如果您可以将代码上载到github帐户,我可以从那里看到您的错误。我的错,您是对的。这是路径错误。我将位置从“shop/sign”更改为“/sign”,现在可以工作了,在显示警报消息后,它会重定向回页面。谢谢!
router.post('/signup', authController.signup);
router.post('/signin', authController.signin);

module.exports = router;