首页 > 解决方案 > 带有动态对象的路由?

问题描述

我有一条路线,定义了我的正方形(一个大区域)的大小,在那个正方形内,我有无数其他 1x1 比例的小正方形,也就是说,如果我的计算匹配,如果我的最大正方形是 50x50,我有 2500 个小正方形它们里面的正方形,它们都是一个应该有这个信息的对象:

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

那将是它们在我的大广场上的坐标,无论它们是否被绘制,当我提交这样的请求时,我应该有这个返回信息:

GET / squares /: x /: y

其中 x 和 y 是我选择的小方块的坐标

问题是 如何为我最大的广场的整个区域创建这个广场路线? 我的意思是,我的方块路线中的对象数量将取决于我当时定义的较大方块的大小......我如何以“动态”的方式创建路线并根据其他东西的价值创建对象?

那是我的代码:

那在我的bancoDeDados.js

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] = C+1
        }
    }


    return territorie
}

这就是我的servidor.js

function getSquares(x,y) {
    return territories.MATRIZ2[0][0]
}

//-

app.get('/squares/:x/:y',(req, res, next) => {
    // console.log(req.params.x, req.params.y)
    const {x, y} = req.params
    res.send(bancoDeDados.getSquares(x, y))
  })

编辑 现在我需要使用这条路线更新我的绘制属性:

PATCH /squares/:x/:y/paint

那应该返回我:

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

直到现在,我都在这样做

function patchSquare(x, y) {
    const stringQuadrado = JSON.stringify(territories.matriz)
    const dadosQuadrado = JSON.parse(stringQuadrado)

    dadosQuadrado[x][y].data.painted = true
    return dadosQuadrado[x][y]
}

它返回我的权利,但它没有更新,因为在我的路线中

GET /squares/:x/:y

继续让我画:假,我需要 patchSquare 来实际更新,这样即使这个 get 路由也可以获取更新的属性

标签: node.jsroutesnodesnested-routes

解决方案


如果您正在使用express(这只是一个假设),那么:

app.get('/squares/:x/:y', function (req, res) {
  // console.log(req.params.x, req.params.y)
  const {x, y} = req.params
  res.send(yourBigSquare[x][y])
})

推荐阅读