如何通过问号快速路由器api更新sql

Posted

技术标签:

【中文标题】如何通过问号快速路由器api更新sql【英文标题】:How to pass a question mark express router api to update sql 【发布时间】:2020-04-05 16:44:43 【问题描述】:

我想使用 End-Point Api (Express NodeJS) 更新 varchar 字段(字符串),但我遇到了问题,我传递了问号等无效输入。

快递端点:

router.get("/updateField/:table/:field/:value/:num/:postid/", function(req, res) 

    connection.query(

        'UPDATE '+ req.params.table +' SET ' + req.params.field +' = '+JSON.stringify(req.params.value) +' where language ='+ req.params.num +' and post_id ='+req.params.postid 

这段代码可以正常工作:

http://localhost:3001/api/updateField/posts/TITLE/When/1/1

但这不起作用:

http://localhost:3001/api/updateField/posts/TITLE/When?/1/1

我通过这样的反应发送请求:

fetch(
      "http://localhost:3001/api/updateField/" +
        table +
        "/" +
        field +
        "/" +
        value +
        "/" +
        lenguage +
        "/" +
        post_id
    );

【问题讨论】:

【参考方案1】:

使用javascript函数encodeURIComponent()转义URL参数中的特殊字符。

例如在你的浏览器控制台上试试这个,你就会明白:

console.log(
      "http://localhost:3001/api/updateField/" +
        table +
        "/" +
        field +
        "/" +
        encodeURIComponent(value) +
        "/" +
        lenguage +
        "/" +
        post_id
    );
console.log(encodeURIComponent("When?"));

您会看到 URL 中的 "When?" 被替换为 "When%3F"。 在 Node.Js 中,您将收到字符串形式的参数值 "When?"

要了解更多关于encodeURIComponent(),请参考this

【讨论】:

+1 完美!但我应该对 express GET 进行解码,但没有必要。 我很高兴它有帮助:)

以上是关于如何通过问号快速路由器api更新sql的主要内容,如果未能解决你的问题,请参考以下文章

服务治理最佳实践:如何快速依据请求参数值进行服务路由鉴权限流?

如果值是列表/数组,则从快速路由器中检索值

在快速服务器上成功调用 api 后重定向具有角度路由的页面

快速路由器 CRUD API。无法删除

如何通过快速路由器使用 Passport 的 connect-ensure-login 保护管理部分?

如何更新 vue-router