Перенаправить ответ в динамический URL - PullRequest
0 голосов
/ 06 июля 2019

Я использую узел js с:

  • Экспресс рамки
  • HBS Framework
  • MongoDB

Моя задача - перенаправить мой ответ на URL с форматом /users/:name/course/:courseId.

После запуска кода с параметрами name = James и courseId = 1234 я получаю /users/James/course/1234 в URL браузера. Тем не менее, я не могу писать на /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 голосов
/ 06 июля 2019

Похоже, вы используете интерполяцию литеральной строки шаблона, где вы должны использовать синтаксис Express для параметров маршрута.См. Раздел «Параметры маршрута» в документах .

Вместо:

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

Попробуйте:

app.post(`/users/:name/course/:courseId`, (req, res) => {
    res.json(result.ops)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...