如何在锚点渲染EJS

时间:2019-06-21 21:39:26

标签: html node.js express ejs mailchimp

我想做些事情(也许有一种更简单的方法,我没有看到),但是基本上我想做的是拥有一个带有Mailchimp Sign Up表单的EJS文件,当注册被填写时,它将重定向到相同的EJS文件,但是这次使用的变量会将文本添加到HTML。

基本上,当用户输入电子邮件时,我们会将其重定向到同一部分,但这一次它在ap标签上添加了文本“谢谢,我们收到了您的电子邮件,我们会尽快与您联系”,这是我的方法:

app.post('/', (req, res) => {
  mailchimp.post('/lists/' + process.env.MAILCHIMP_LIST + '/members', {
      email_address: req.body.email,
      status: 'subscribed'
    }, (err) => {
    if(err){
      console.log(err.title);
      if(err.title == 'Member Exists'){
        res.redirect('/#signup', {
          Status: "Thank you, we've got your email, we'll get in touch with you soon"
        })
      }else{
        res.redirect('/#signup', {
          Status: "We're having problems signing you up, if the problem persists send an email to hello@hibuddie.com"
        })
      }
    }
  });
  res.redirect('/#signup', {
    Status: "Thank you, we've got your email, we'll get in touch with you soon"
  });
});

但是,尝试执行此操作时,我的控制台出现错误:

express deprecated res.redirect(url, status): Use res.redirect(status, url) instead app.js:45:7

我知道重定向可能不适用于EJS,但是我不知道该怎么做,因此它将用户重定向到具有特定ID的同一EJS文件,在这种情况下说/#signup。

对不起,我的代码太糟糕了,大声笑。

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式进行操作:

您可以使用rendering代替redirect,并将变量添加到渲染函数。

// pass a local variable to the view
res.render('user', { name: 'Tobi' }, function (err, html) {
  // ...
})

并处理视图文件中的变量。 您还可以发送anchor名称作为变量,并添加一些JavaScript来处理它。喜欢:

res.render('user', { anchor: 'signup' }, function (err, html) { ... });

然后在模板文件中添加一些javascript,

window.onload = function (event) {
    window.location.hash = "#{{anchor}}";
};

,如果您使用Ajax调用来访问api,则只需返回状态即可,

res.json({
    success: true,//or false
    data: {
        Status: "some text"
    }
})

并使用Javascript在前端进行处理。