从express.js发布请求将变量传递到ejs文件

时间:2019-01-12 11:59:47

标签: node.js express ejs

提交表单后,我想呈现同一页面,但在表单上方显示“消息已成功发送”消息。通过此代码,我得到“引用错误,未定义msg”,当我使用相同的代码时发现它很奇怪,但是在GET请求中,它可以正常工作。 GET和POST请求之间有不同的技术吗?

const express = require('express');
const app = express();
app.set('view engine', 'ejs');

app.get('/contact', (req, res) => {
    res.render('contact');
});

app.post('/send', (req, res) => {
    res.render('contact', {msg: 'Message sent successfully!'});
});
<section class="section-b">
                <div>
                    <p><%= msg %></p>
                    <form action="send" id="contact-form" method="POST">
                        <input type="text" name="name" placeholder="Name">
                        <input type="email" name="emailContact" placeholder="E-mail"><br>
                        <textarea name="message" id="message" rows="10" placeholder="Your message here..."></textarea><br>
                        <button type="submit">Submit</button>
                    </form>
                </div>
 </section>

2 个答案:

答案 0 :(得分:3)

您需要检查是否定义了变量( msg ),在.get("/contact")请求中,您没有发送 msg 作为参数,因此为什么会出现错误

 <% if(typeof msg !== 'undefined') { %>
    <p><%= msg %></p>
 <% } %>

答案 1 :(得分:1)

基于@Chiller答案的结论,如果您不想使用<% if(typeof msg !== 'undefined') { %>,则需要在msg方法中定义.get变量,例如:

app.get('/contact', (req, res) => {
    res.render('contact', {msg: '')};
});

app.post('/send', (req, res) => {
    res.render('contact', {msg: 'Message sent successfully!'});
});

然后,您可以在<p><%= msg %></p>文件中使用.ejs,而无需检查变量是否未定义。

但是我也喜欢@Chiller的答案。