NodeJS 构建复杂的rest API express.js请求

qmb5sa22  于 2023-08-04  发布在  Node.js
关注(0)|答案(2)|浏览(116)

我有一个数据库,它具有以下结构。我需要写一个请求,将发出一个职位,由user_id和id。

id |           title            |           content           | user_id 
----+----------------------------+-----------------------------+---------

字符串
这是我试过的路线,但它不起作用。

router.put('/post/:user_id&id', updatePost);


这是一个控制器,我不明白如何正确地传递数据的正确请求到数据库

async updatePost(req, res) {
    try {
        const id = req.query.id
        const user_id = req.query.user_id
        const {title, content} = req.body
        const updatePost = await db.query(`UPDATE post SET title = $1, content = $2 WHERE id = $3 AND user_id = $4`, [title, content, id, user_id])
        res.json(updatePost.rows)
    } catch (err) {
        console.log('Error when update a post:', err)
        res.status(500).json({error: 'Something went wrong, try again later. Res status - 500'})
    }
    
}


我也试试下一条路

router.put('/post/:user_id/:id', updatePost); 
// But I don't understand how the controller takes the data for user_id and id

4dc9hkyq

4dc9hkyq1#

你混淆了两个不同的概念。
路由参数使用router.put('/post/:user_id/:id'定义,在URL中使用http://example.com/post/myUserId/myid/发送,并显示在req.params中。
query stringnotdefined in the route(router.put('/post/',,sent in the URL with http://example.com/post/?user_id=myUserId&id=myid and appear in req.query.

jtoj6r0c

jtoj6r0c2#

基本上就是昆汀的回答。Express on node是一个非常有用的系统,也是一个易于构建的系统。
您应该决定如何构造此路由、查询参数或路由参数。
这是路由参数的答案

router.put('/post/:user_id/:id', updatePost);

async updatePost(req, res) {
  try {
    const id = req.id
    const user_id = req.user_id
    const {
      title,
      content
    } = req.body
    const updatePost = await db.query(`UPDATE post SET title = $1, content = $2 WHERE id = $3 AND user_id = $4`, [title, content, id, user_id])
    res.json(updatePost.rows)
  } catch (err) {
    console.log('Error when update a post:', err)
    res.status(500).json({
      error: 'Something went wrong, try again later. Res status - 500'
    })
  }

}

字符串

相关问题