将响应重定向到动态网址

时间:2019-07-06 17:55:03

标签: node.js express

我将node js用于:

  • 表达框架
  • hbs框架
  • mongodb

我的任务是将我的响应重定向到格式为/users/:name/course/:courseId的网址。

使用参数名称= James和courseId = 1234运行代码后,我在浏览器URL中得到/users/James/course/1234。但是,我无法发布到/users/James/course/1234

编辑:数据已成功发布,但我收到一条消息,提示无法获取/ users / James / course / 1234。

我有以下代码:

app.js:

app.get('/', (req, res) => {
    res.render('form.hbs')
})

app.post('/saveUsers', [
    // firstname must contain letters only
    check('firstname', 'First name should contain only letters').isAlpha(),
    // email must be in a email format
    check('email', 'Email field must be in a email format').isEmail(),
    // courseId must be numerical and exactly 4 digits
    check('courseId', 'course ID should contain only numbers').isNumeric(),
    check('courseId', 'course ID should be exactly 4 digits').isLength({ min: 4, max: 4 })
], (req, res) => {
    const errors = validationResult(req)
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array(), data:req.body})
    }
    var db = utils.getDb()
    db.collection('users').insertOne({
        name: req.body.firstname,
        email: req.body.email,
        courseId: req.body.courseId
    }, (err, result) => {
        if (err) {
            Response.send('Unable to insert a student')
        }
        console.log(result.ops)
        nameUrl = result.ops[0].name
        courseIdUrl = result.ops[0].courseId
        res.redirect(`/users/${nameUrl}/course/${courseIdUrl}`)
    })
})

app.post(`/users/${nameUrl}/course/${courseIdUrl}`, (req, res) => {
    res.json(result.ops)
})

form.hbs:

<!DOCTYPE html>
<html>
    <body>
        <h1>Welcome</h1>
        <p>Enter your name, email and course ID:</p>
        <form action="/saveUsers" method="POST" id="myForm">
            <input type="text" placeholder="firstname" name="firstname">
            <input type="email" placeholder="email" name="email">
            <input type="text" placeholder="courseId" name="courseId">
            <input type="submit" value="Submit">
        </form>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

似乎您正在使用模板文字字符串插值,您应该在其中将Express语法用于路由参数。请参阅docs中的“路由参数”部分。

代替:

app.post(`/users/${nameUrl}/course/${courseIdUrl}`, (req, res) => {
    res.json(result.ops)
})

尝试:

app.post(`/users/:name/course/:courseId`, (req, res) => {
    res.json(result.ops)
})