反应如何将变量传递给获取请求

Posted

技术标签:

【中文标题】反应如何将变量传递给获取请求【英文标题】:React how can you pass a variable to a get request 【发布时间】:2022-01-19 22:44:18 【问题描述】:

我正在尝试从teacherId 等于登录人的teacherId 的表中进行查询,但我无法将teacherId 从前端传递到后端.

这是后端

app.get("/api/get", async(req,res) => 
    const teacherId = req.body.teacherId
    connection.query(
        "SELECT class FROM homework WHERE teacherID = ?",
        [teacherId],
        (err, result) => 
            if (result)
                res.send( message: result )
             else
                console.log(err)
            
        
    )
)

这是前端

 useEffect(() => 
        Axios.get("http://localhost:1337/api/get", 
            teacherId: teacherId
        ).then((response) => 
            if(response)
                setDisplayHomework(response.data.message)
             else
                console.log("error")
            
        )
    )
const teacherId = localStorage.getItem("teacherId")

我认为问题出在teacherId: teacherId 上,但我不知道为什么。

【问题讨论】:

您要在网址中发送param 吗? @Alessandro 不,我想将变量teacherId从前端传递到后端 【参考方案1】:

你需要使用

Axios.get("http://localhost:1337/api/get", 
     params:  teacherId 
 );

并使用req.query.teacherId 阅读它


如果您看到Axios.get 签名,那就是

axios.get(url[, config])

对比

axios.post(url[, data[, config]])

将数据作为第二个参数传递。

那是因为GET 请求中的正文没有被服务器使用。阅读HTTP GET with request body了解更多信息。

【讨论】:

谢谢,这对我有很大帮助,我对此很陌生【参考方案2】:

通常您不会发送带有获取请求的正文。将教师 ID 放入 url。然后这称为路径变量。

app.use('/teacher/:teacherId', function(req, res, next) 
  console.log(req.params.teacherId);
  next();
)

【讨论】:

【参考方案3】:

Get 请求不像 post 请求那样有请求主体,因此 Axios.get 函数不应该有第二个主体参数。而是将参数作为 url 传递,如下所示:

useEffect(() => 
        Axios.get("http://localhost:1337/api/get?teacherId="+teacherId).then((response) => 
            if(response)
                setDisplayHomework(response.data.message)
             else
                console.log("error")
            
        )
    )

然后在您的后端代码中使用 req.params 来访问获取请求的 url 参数:

app.get("/api/get", async(req,res) => 
    const teacherId = req.params.teacherId
    connection.query(
        "SELECT class FROM homework WHERE teacherID = ?",
        [teacherId],
        (err, result) => 
            if (result)
                res.send( message: result )
             else
                console.log(err)
            
        
    )
)

【讨论】:

以上是关于反应如何将变量传递给获取请求的主要内容,如果未能解决你的问题,请参考以下文章

如何将反应组件作为变量传递给子组件?

反应路由器将变量/状态传递给新路由?

如何使用从子组件传递给组件的反应变量更新 redux 状态

如何在反应JavaScript中将id传递给navlink

在页面加载时将道具传递给子组件 - 与 next.js 做出反应

如何将一个反应组件传递给另一个反应组件以包含第一个组件的内容?