如何在Node.js和Express中使用PATCH

雷纳托·扎诺特利

最初,我在路线上使用信息(POST /地区)

app.post('/territories', (req, res, next) => { // Cria um produto
    
    const territories = bancoDeDados.salvarTerritorie({
        data:{
        nome : req.body.name,
        inicio : {x : req.body.inicio, y : req.body.inicio},
        fim : { x : req.body.fim, y : req.body.fim},
        área : req.body.fim * req.body.fim,
        pintado_área :  0,
        }        
    },req.body.fim);

    res.send(territories)
})

这条路线返回我:

{
    "data": {
        "nome": "potato",
        "inicio": {
            "x": "0",
            "y": "0"
        },
        "fim": {
            "x": "5",
            "y": "5"
        },
        "área": 25,
        "pintado_área": 0
    },
    "id": 1
}

然后,我需要使用路由(GET / squares /:x /:y)访问矩阵的特定索引(巨型正方形中的迷你正方形之一)。通过这条路线,我得到:

{
  "data": {
    "x": 1,
    "y": 2,
    "painted": false  
  },
  "error": false
}

我的目标是在进入此路线时使用PATCH路线(/ squares /:x /:y / paint)将“ painted”从false更改为true。

{
  "data": {
    "x": 1,
    "y": 2,
    "painted": true
  },
  "error": false
}

但是,当我返回GET(/ squares :: x /:y)来检查它是否仍然被绘制时,我又一次得到了假。

我没有在此更改中获得成功,我能够使PATCH传递为True,但是再次调用GET进行检查时,我得到False。有人知道如何解决吗?

**编辑**

遵循我的补丁路线:

app.patch('/squares/:x/:y/paint', (req, res, next) => {
    const x = req.params.x
    const y = req.params.y

    res.send({
        painted : true
    })
})

我从中得到以下价值:

{
    "painted": true
}

编辑16/12 01:47

我的发布路线创建了此矩阵以及一个顺序ID。

function salvarTerritorie(territorie,area) { //Define o Id seguinte para o territorie ou utiliza um ID definido caso tenha
    if (!territorie.id) territorie.id = sequence.id
    territories[territorie.id] = territorie
    
    var MATRIZ2 = [];
    for (var i = 0; i < area; i++) {
        MATRIZ2[i] = [];
        for (var j = 0; j < area; j++) {
            MATRIZ2[i][j] = ''
        }
    }

    for (var L = 0; L < area; L++) {
        for (var C = 0; C < area; C++) {
            
            MATRIZ2[L][C] = {
                data: {
                  x: L,
                  y: C,
                  painted: false  
                },
                error: false
              }
        }
    }

我尝试重用您发送给我的代码:

app.patch('/squares/:x/:y/paint', (req, res, next) => {
    const x = req.params.x
    const y = req.params.y
    const changes = req.body;

    const originalInformation = bancoDeDados.retrieveOriginalInformationInMatrix(x, y);
    // originalInformation will be {"x": 1, "y": 2, "painted": false }

    let modifiedInformation = originalInformation
    if (changes.painted !== undefined) {
        modifiedInformation.painted = true // Updates new information with desired changes
    }
    // Other possible changes like changes.x or changes.y

    res.send(modifiedInformation); // Returns modified information back to user
})

我用您提供的函数名称创建了一个函数:

function retrieveOriginalInformationInMatrix(x,y){
    const stringQuadrado = JSON.stringify(territories.matriz)
    const dadosQuadrado = JSON.parse(stringQuadrado)
    return dadosQuadrado[x][y].data.painted = true
}

使用补丁程序时,我得到的只是一条“真实”消息。

再次检查get,false保持不变。

编辑16/12 02:41

得益于我的帮助,我取得了突破,我设法使他同时插入了新的绘画,但是我无法更改现有绘画的价值。通过IcyBloom传递的功能:

app.patch('/squares/:x/:y/paint', (req, res, next) => {
    const x = req.params.x
    const y = req.params.y
    const changes = req.body;
    const originalInformation = bancoDeDados.retrieveOriginalInformationInMatrix(x, y);
    // originalInformation will be {"x": 1, "y": 2, "painted": false }
    let modifiedInformation = originalInformation
    if (changes.painted !== undefined) {
        modifiedInformation.data.painted = true // Updates new information with desired changes
    }
    // Other possible changes like changes.x or changes.y
    res.send(modifiedInformation); // Returns modified information back to user
})

我得到以下结果:

{
    "data": {
        "x": 4,
        "y": 4,
        "painted": false
    },
    "error": false,
    "painted": true
}

我需要更改现有的涂色而不是创建新的。但是我不明白。

冰冷的布卢姆

因此,连同我的评论,这是您的PATCH API外观的大致示例

app.patch('/squares/:x/:y/paint', (req, res, next) => {
    const x = req.params.x
    const y = req.params.y
    const changes = req.body;

    const originalInformation = retrieveOriginalInformationInMatrix(x, y);
    // originalInformation will be {"x": 1, "y": 2, "painted": false }

    let modifiedInformation = originalInformation
    if (changes.painted !== undefined) {
        modifiedInformation.painted = changes.painted // Updates new information with desired changes
    }
    // Other possible changes like changes.x or changes.y
    saveModifiedInformation(x, y, modifiedInformation);

    res.send(modifiedInformation); // Returns modified information back to user
})

您可能想知道req.body什么发送PATCH请求时,与您的POST请求很像,其中更改位于请求正文中。因此,在上面的示例中,我的设想req.body是:

{
    "painted": "true"
}

编辑:尝试retrieveOriginalinformationInMatrix像这样修改您的功能

function retrieveOriginalInformationInMatrix(x,y){
    const stringQuadrado = JSON.stringify(territories.matriz)
    const dadosQuadrado = JSON.parse(stringQuadrado)
    return dadosQuadrado[x][y]
}

这应该返回 {"x": 1, "y": 2, "painted": false }

接下来,将此函数插入​​原始示例(请参见上文,我已经在其中添加了它):

function saveModifiedInformation(x, y, modifiedInformation) {
    territories.matriz[x][y] = modifiedInformation
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Node JS 中使用 express 创建控制器和路由器

来自分类Dev

如何在Node.js中使用If语句和for循环?

来自分类Dev

如何在Node.js中使用Express Get Route从URL中提取页面名称和AuthToken?

来自分类Dev

在node.js和Express中使用URL参数

来自分类Dev

如何使用Node.js和Express在MySQL中使用多个变量进行选择*?

来自分类Dev

如何在条件中间件中使用Node.js Express-session?

来自分类Dev

如何在条件中间件中使用Node.js Express会话?

来自分类Dev

如何在 Express 和 MongoDB 中使用异步和等待

来自分类Dev

如何在node.js中将Express与Promise结合使用?

来自分类Dev

如何在FFMPEG和Node中使用流

来自分类Dev

如何在Java XPath查询中使用name()和/或node()?

来自分类Dev

如何在node.js中使用混合的C ++和.Net dll?(错误:abort()已被调用)

来自分类Dev

如何在Node.js和Jade中使用客户端Jquery?

来自分类Dev

如何在Hyperledger 1.4.4的Node.js中使用setTransient和getTransient(示例)?

来自分类Dev

如何在Node.js和TypeScript项目中使用URLSearchParams

来自分类Dev

我如何在node.js中使用html5和jquery

来自分类Dev

如何在Node.js和Jade中使用客户端Jquery?

来自分类Dev

如何在Node.js中使用猫鼬进行原子查找和保存

来自分类Dev

如何在Node.js路由器中使用Promise和yield?

来自分类Dev

如何在 Node.js 中使用“async/await”和“promises”进行同步执行?

来自分类Dev

如何在 node.js 和 mysql 中使用多个 SQL

来自分类Dev

如何在node_js和mongodb中使用_id更新数据

来自分类Dev

如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符

来自分类Dev

如何在Node.js中使用XHR API?

来自分类Dev

如何在HTML中使用node.js库?

来自分类Dev

如何在sails.js中使用node-inspector?

来自分类Dev

node.js:如何在koa中使用护照

来自分类Dev

如何在Node.js中使用Swig输出JSON

来自分类Dev

如何在Node JS中使用事件?

Related 相关文章

  1. 1

    如何在 Node JS 中使用 express 创建控制器和路由器

  2. 2

    如何在Node.js中使用If语句和for循环?

  3. 3

    如何在Node.js中使用Express Get Route从URL中提取页面名称和AuthToken?

  4. 4

    在node.js和Express中使用URL参数

  5. 5

    如何使用Node.js和Express在MySQL中使用多个变量进行选择*?

  6. 6

    如何在条件中间件中使用Node.js Express-session?

  7. 7

    如何在条件中间件中使用Node.js Express会话?

  8. 8

    如何在 Express 和 MongoDB 中使用异步和等待

  9. 9

    如何在node.js中将Express与Promise结合使用?

  10. 10

    如何在FFMPEG和Node中使用流

  11. 11

    如何在Java XPath查询中使用name()和/或node()?

  12. 12

    如何在node.js中使用混合的C ++和.Net dll?(错误:abort()已被调用)

  13. 13

    如何在Node.js和Jade中使用客户端Jquery?

  14. 14

    如何在Hyperledger 1.4.4的Node.js中使用setTransient和getTransient(示例)?

  15. 15

    如何在Node.js和TypeScript项目中使用URLSearchParams

  16. 16

    我如何在node.js中使用html5和jquery

  17. 17

    如何在Node.js和Jade中使用客户端Jquery?

  18. 18

    如何在Node.js中使用猫鼬进行原子查找和保存

  19. 19

    如何在Node.js路由器中使用Promise和yield?

  20. 20

    如何在 Node.js 中使用“async/await”和“promises”进行同步执行?

  21. 21

    如何在 node.js 和 mysql 中使用多个 SQL

  22. 22

    如何在node_js和mongodb中使用_id更新数据

  23. 23

    如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符

  24. 24

    如何在Node.js中使用XHR API?

  25. 25

    如何在HTML中使用node.js库?

  26. 26

    如何在sails.js中使用node-inspector?

  27. 27

    node.js:如何在koa中使用护照

  28. 28

    如何在Node.js中使用Swig输出JSON

  29. 29

    如何在Node JS中使用事件?

热门标签

归档