我使用nodejs作为服务器
目前,我的项目文件夹中有一个Json。
name.json
{
"name_English": "Apple",
"name_German": "Apfel",
"name_French": "Pomme"
}
当我向服务器发送请求时,它返回:
GET http://localhost:3030/name
{
"name_English": "Apple",
"name_German": "Apfel",
"name_French": "Pomme"
}
但我发现这对前端开发并不方便。
有什么方法可以做下面这样的事情吗?
GET http://localhost:3030/name?lang=en
{
"name": "Apple"
}
GET http://localhost:3030/name?lang=fr
{
"name": "Apfel"
}
编辑1
在Feathers.js 中获取Json的代码
name.class.js
const nameLists = require('../name.json')
exports.Test = class Test {
constructor (options) {
this.options = options || {};
}
async find (params) {
return nameLists
}
};
编辑2
有可能把name.json做成这样吗?
{
"name": ${name}
}
编辑3
我之所以要实现上述目标,是因为我必须返回整个Json文件。对于国际化库,它似乎需要在JSON之外进行处理,我不知道这样做的最佳实践是什么
这里有一个完整的演示,只有express。(希望没关系。(
const express = require('express');
const app = express();
const port = 3030;
const nameLists = require('./name.json');
const unabbreviateLanguage = {
en: 'English',
de: 'German',
fr: 'French'
}
function filterByLanguage(obj, abbr) {
let language = unabbreviateLanguage[abbr];
let suffix = '_' + language;
let result = {};
for (let key in obj) {
if (key.endsWith(suffix)) {
let newkey = key.slice(0, -suffix.length);
result[newkey] = obj[key];
}
}
return result;
}
app.get('/name', (req, res) => {
res.json(filterByLanguage(nameLists, req.query.lang));
});
app.listen(port);
例如:
curl http://localhost:3030/name?lang=de
输出:
{"name":"Apfel"}
这个想法是迭代输入对象的键,并准备一个只有与语言后缀匹配的键的输出对象(然后去掉后缀(。您可能想要en
->English
,或者只使用与参数匹配的密钥名称,例如,将name_English
重命名为name_en
。
在FeathersJS中,find
的params
对象将存储传入URL的查询字符串。因此,如果您调用http://localhost:3030/name?lang=en
,params
对象将是:-
{
query: {
lang: 'en'
}
}
然后,您可以使用这些信息来确定从JSON返回哪个结果。
https://docs.feathersjs.com/guides/basics/services.html#service-方法
您的问题分为两部分:处理查询和处理国际化。
处理查询:
Features在以下位置通过上下文对象显示查询:
context.params.query
处理国际化:
有许多坚实的包可用于处理国际化:
https://openbase.com/categories/js/best-nodejs-internationalization-libraries?orderBy=RECOMMENDED&