使用express提交表单后,将文件和用户名一起呈现到url中

时间:2018-07-13 23:29:42

标签: node.js express mongoose ejs

我有一个nodeJS应用程序,该应用程序从表单中获取用户信息,并使用mongoose保存到mongoDB数据库。

example:
router.post('/', (req, res) => {
    newUser.save()
}

我看过其他网站,这些网站会在表单提交后更新URL,我猜这是用户的查询字符串,并添加到URL的末尾。

Example: http://stackoverflow.com/profile/Jon%Doe

在提交表单后,不确定如何使用用户信息更新网址。 我尝试渲染文件:

router.req('/', (req, res) => {
    res.render('profile' + username) //username is a variable of the user
}

,但这只会查找带有用户名的网址。认为我必须以某种方式用用户名更新ejs模板文件。

1 个答案:

答案 0 :(得分:1)

要在表单发布后更改URL,可以使用res.redirect()将浏览器重定向到新URL。然后,浏览器将请求该新URL,并且您需要具有该新URL的路由才能返回所需的页面内容。

router.post('/', (req, res) => {
    // other code here to process form data
    newUser.save(..., function(err) {
        if (err) {
            console.log(err);
            res.sendStatus(500);
        } else {
            // build new URL here
            res.redirect(newURL);
        }
    });
}

如果您随后要在重定向到的页面中显示用户名,则可以使用在其中包含用户名的EJS模板,并且可以从将用户名放在URL中的任何位置获取用户名,将其提供给模板的res.render(),以便EJS在正确的位置插入用户名。

如果您要进行某种登录,则可能需要以不同的方式进行整个过程。您可能要在服务器上创建一个用户会话对象(可能使用express-session)并将用户名保留在其中,因此,无论何时要渲染页面,都可以从服务器端会话对象中获取用户名,而不是而不是将其放在URL中。这可能更简单一些。