繁体   English   中英

Node-Express:过滤请求查询并显示其余数据

[英]Node-Express: filter request query and display rest of the data

我是 Node 查询的新手。 我正在为我的后端应用程序使用 Node express。 我有一个嵌套的 json,它有三种语言选项,内部语言有authdashboarddatadata1选项。 我想过滤查询并在浏览器中显示其余的 json 数据。 例如,如果我像这样输入 url: http://localhost:5000/?namespaces=auth&languages=en,fi那么它将显示语言enfi's数据以及我想显示auth's数据的namespaces 为了显示数据,我创建了一个输出空对象,并希望将其添加到我的输出对象中。 但不知道该怎么做。

我已经在codeandbox 中分享了我的代码。

这是我的json数据

{
    "en": {
        "auth": {
            "welcomeMessage3": "Hi John"
        },
        "dashboard": {
            "welcomeMessage": "Hi Doe"
        },
        "data (1)": {
            "welcomeMessage3": "Hi Jonny"
        },
        "data": {
            "welcomeMessage3": "Hi Monty"
        }
    },
    "fi": {
        "auth": {
            "welcomeMessage3": "Moi name "
        },
        "dashboard": {
            "welcomeMessage": "Moi dashboard"
        },
        "data (1)": {
            "welcomeMessage3": "Moi data 1"
        },
        "data": {
            "welcomeMessage3": "Moi data"
        }
    },
    "sv": {
        "auth": {
            "welcomeMessage3": "Hej John"
        },
        "dashboard": {
            "welcomeMessage": "Hej dashboard"
        },
        "data (1)": {
            "welcomeMessage3": "Hej data"
        },
        "data": {
            "welcomeMessage3": "Hej data"
        }
    }
}

这是我的快递应用

    const express = require('express')
    const app = express()
    const port = 5000
    const translationData = require('./translations'); // My json
    
    
    const filterTranslations = (namespaces, languages) => {
  let output = {};
  const translations = { ...translationData };
  console.log("I am typing Languages", languages);
  console.log("I am typing namespace", namespaces);
  for (const lng in translations) {
    console.log("languages are coming from translation json", lng);
    if (lng.length !== 0 && lng !== languages) {
      delete translations[lng];
      console.log("Delete rest of the language", lng);
    } else {
      for (const ns in translations[lng]) {
        if (ns.length !== 0 && ns !== namespaces) {
          delete translations[lng][ns];
          console.log("delete rest of the Namespace", ns);
        }
      }
    }
  }
  return output;
};
    
    
    app.get('/', (req, res) => {
      res.send(
        filterTranslations(
          req.query.namespaces,
          req.query.languages,
        )
      )
    })
    
    app.listen(port, () => {
      console.log(`Example app listening at http://localhost:${port}`)
    })

有几个错误:

  • 函数filterTranslations应该返回一个值,这里是translations
  • 您的if语句中的条件不正确: lng !== languages ,在您的示例中, languages = 'en,fi'lng将是enfi 查看String.includes( searchString [, position ])split您的languages并使用Array.includes( searchElement[, fromIndex])

希望能帮到你,祝你有美好的一天!

如果我正确理解你想要做什么,我认为你把事情复杂化了。

首先,将逗号分隔的字符串作为参数传递并不是最好的主意,因为您必须通过在逗号中拆分字符串将其转换为后端的数组。 最好是从数组开始。 这意味着您的网址将是:

http://localhost:8080/?namespaces=auth&languages[]=en&languages[]=fi

那么处理这个的函数将是:

const filterTranslations = (namespaces, languages) => {
  let output = [];
  const translations = { ...translationData };
  //languages are now an array
  for (let l in languages) {
    let lng = languages[l];
    // for each language you send as a parameter you push a new object in your output with the language as a key and the values
    output.push({[lng]:translations[lng]});
  }
  return output;
};

预期输出如下:

[
    {
        "en": {
            "auth": {
                "welcomeMessage3": "Hi John"
            },
            "dashboard": {
                "welcomeMessage": "Hi Doe"
            },
            "data (1)": {
                "welcomeMessage3": "Hi Jonny"
            },
            "data": {
                "welcomeMessage3": "Hi Monty"
            }
        }
    },
    {
        "fi": {
            "auth": {
                "welcomeMessage3": "Moi name "
            },
            "dashboard": {
                "welcomeMessage": "Moi dashboard"
            },
            "data (1)": {
                "welcomeMessage3": "Moi data 1"
            },
            "data": {
                "welcomeMessage3": "Moi data"
            }
        }
    }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM