无法 POST / - 带参数的 URL

问题描述 投票:0回答:2

我试图发布一些东西,但总是出错。

articlesRouter.post('articles/:target', async (req, res) => {
    const target = req.params.target.replaceAll("_", " ")
    const article = await Article.findOne({where: {title: target}})
    if (article)
    {
        const author = req.body.commentAuthor
        const text = req.body.commentText
        await article.createComment({author, text})
        console.log("POST METHOD IS WORKING")
    }
})

形式:

 <form method="post">
            <textarea placeholder="Title of your article" id="title" name="articleTitle"></textarea>
            <br />
            <textarea placeholder="Body of your article" id="body" type="text" name="articleBody"></textarea>
            <br />
            <button id="submit" type="submit">Done</button>
        </form>

获取方法

articlesRouter.get('/articles/:target', async (req, res) => {
    const target = req.params.target.replaceAll("_", " ")
    const searchResult = await Article.findOne({where: {title: target}})
    if (searchResult)
    {
        const correspondingComments = await searchResult.getComments()
        res.render('../views/currentArticle', {title: searchResult.title, text: searchResult.body, comments: correspondingComments})
    }
    else{
        console.log('Error')
    }
})

您可以看到,文章的路径由

/articles
/title_of_article
组成。我认为这个问题在这一行
articlesRouter.post('articles/:target'.....

可能我不能使用带有 /:params 的 post 方法??? 感谢您的阅读!

javascript express routes ejs http-method
2个回答
0
投票

要解决此问题,您需要确保表单字段的名称与您在服务器端代码中访问的键匹配。以下是更新表单以匹配预期键的方法:

<form method="post">
  <textarea placeholder="Title of your article" id="title" name="commentAuthor"></textarea>
  <br />
  <textarea placeholder="Body of your article" id="body" type="text" name="commentText"></textarea>
  <br />
  <button id="submit" type="submit">Done</button>
</form>

0
投票
  • 如果您发布表单,您将在 req.body 中获得输入,而不是在 req.params 中。
  • 从路由路径中删除参数:target,也许你 文章前需要一个“/”以获得完整的路线路径。
  • 发送类似 res.status(200).end()、res.send('ok'), ... 的响应来完成请求。

形式:

<!DOCTYPE html>
<html>
<head>
  <title>Form</title>
</head>
<body>
  <form method="post" action="/test/articles">
    <textarea placeholder="Title of your article" id="title" name="articleTitle"></textarea>
    <br />
    <textarea placeholder="Body of your article" id="body" type="text" name="articleBody"></textarea>
    <br />
    <button id="submit" type="submit">Done</button>
  </form>
</body>
</html>

app.js:

...
const testRouter = require('./routes/test');
...
app.use('/test', testRouter);
...

测试.js:

const express = require('express');
const articlesRouter = express.Router();

articlesRouter.post('/articles', (req, res) => {
  const target = req.body.articleTitle.replaceAll("_", " ")
  console.debug(target)
  // ... your DB access code
  res.send('ok')
})

module.exports = articlesRouter;
© www.soinside.com 2019 - 2024. All rights reserved.