[英]Node-Express: filter request query and display rest of the data
我是 Node 查询的新手。 我正在为我的后端应用程序使用 Node express。 我有一个嵌套的 json,它有三种语言选项,内部语言有auth
、 dashboard
、 data
和data1
选项。 我想过滤查询并在浏览器中显示其余的 json 数据。 例如,如果我像这样输入 url: http://localhost:5000/?namespaces=auth&languages=en,fi
那么它将显示语言en
和fi'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
将是en
或fi
。 查看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.