Node.js 如何配置JSON服务器以支持特定的查询字符串参数?
我检查了json服务器以添加配置: 因为我想在开发环境中的应用程序中添加对查询字符串参数的支持Node.js 如何配置JSON服务器以支持特定的查询字符串参数?,node.js,json,json-server,Node.js,Json,Json Server,我检查了json服务器以添加配置: 因为我想在开发环境中的应用程序中添加对查询字符串参数的支持 routes.json: { "/api/v1/*": "/$1", } { "operations?code=": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}], "operations?code=adi": [{"operationCode
routes.json
:
{
"/api/v1/*": "/$1",
}
{
"operations?code=": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adi": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adid": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adida": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adidas": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adidas1": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas10": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas101": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas9": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"}],
"operations?code=adidas96": [{"operationCode":"ADIDAS96"}],
"operations?code=adidas99": [{"operationCode":"ADIDAS99"}],
}
/api faked/db.json
:
{
"/api/v1/*": "/$1",
}
{
"operations?code=": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adi": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adid": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adida": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adidas": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adidas1": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas10": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas101": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas9": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"}],
"operations?code=adidas96": [{"operationCode":"ADIDAS96"}],
"operations?code=adidas99": [{"operationCode":"ADIDAS99"}],
}
应用程序运行时使用:
{
"name": "rm-combo",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "concurrently -k \"json-server --watch api-faked/db.json --routes api-faked/routes.json --ro\" \"vue-cli-service serve\"",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
...
启动应用程序时:
[1] INFO Starting development server...
[0]
[0] \{^_^}/ hi!
[0]
[0] Loading api-faked/db.json
[0] Loading api-faked/routes.json
[0] Done
[0]
[0] Resources
[0] http://localhost:3000/operations?code=
[0] http://localhost:3000/operations?code=adi
[0] http://localhost:3000/operations?code=adid
[0] http://localhost:3000/operations?code=adida
[0] http://localhost:3000/operations?code=adidas
[0] http://localhost:3000/operations?code=adidas1
[0] http://localhost:3000/operations?code=adidas10
[0] http://localhost:3000/operations?code=adidas101
[0] http://localhost:3000/operations?code=adidas9
[0] http://localhost:3000/operations?code=adidas96
[0] http://localhost:3000/operations?code=adidas99
...
有点奇怪的是,上面的参考资料显示,JSON服务器生成的资源中没有/api/v1/
段
显然,当我在端点上执行GET操作时,比如:
http://localhost:3000/api/v1/operations?code=
或
http://localhost:3000/operations?code=adidas1
我得到了一个404
但是如果我要添加到db.json
:
{
"/api/v1/*": "/$1",
}
{
"operations?code=": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adi": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adid": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adida": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adidas": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"},{"operationCode":"ADIDAS101"}],
"operations?code=adidas1": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas10": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas101": [{"operationCode":"ADIDAS101"}],
"operations?code=adidas9": [{"operationCode":"ADIDAS96"},{"operationCode":"ADIDAS99"}],
"operations?code=adidas96": [{"operationCode":"ADIDAS96"}],
"operations?code=adidas99": [{"operationCode":"ADIDAS99"}],
}
“操作”:[{“操作代码”:“ADIDAS96”},{“操作代码”:“ADIDAS99”},{“操作代码”:“ADIDAS01”}],
然后/api/v1/operations?code=which
上的任何GET请求都将返回(不管code
查询字符串如何)将返回db/json
中operations
中给定的对象
如何让JSON服务器按照/api faked/db.JSON
中给出的查询字符串配置运行,即:
/api/v1/operations?code=adidas101
和/api/v1/operations?code=adidas99
返回两个不同的结果 通过以下配置使其正常工作:
routes.json
{
"/api/v1/*": "/$1"
}
{
"operations": [
{
"code": "empty",
"operationCode": "EMPTY"
},
{
"code": "adidas96",
"operationCode": "ADIDAS96"
},
{
"code": "adidas99",
"operationCode": "ADIDAS99"
},
{
"code": "adidas101",
"operationCode": "ADIDAS101"
},
{
"code": "vpe_ultima2",
"operationCode": "VPE_ULTIMA2"
}
],
"stockaccountingdata": [
{
"operationId": "ADIDAS96",
"codeStock":"STO61177",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS99",
"codeStock":"STO69084",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO73106",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO77162",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "VPE_ULTIMA2",
"codeStock":"STO73220",
"companyName":"PPK",
"contractualTypology":"EN MANDAT",
"vatCode":"FR51442790366"
}
],
"virtualshipping": [
{
"operationId": "VPE_ULTIMA2",
"operationCode":"VPE_ULTIMA2",
"siteId":0,
"createdOn":"0001-01-01T00:00:00"
}
]
}
db.json
{
"/api/v1/*": "/$1"
}
{
"operations": [
{
"code": "empty",
"operationCode": "EMPTY"
},
{
"code": "adidas96",
"operationCode": "ADIDAS96"
},
{
"code": "adidas99",
"operationCode": "ADIDAS99"
},
{
"code": "adidas101",
"operationCode": "ADIDAS101"
},
{
"code": "vpe_ultima2",
"operationCode": "VPE_ULTIMA2"
}
],
"stockaccountingdata": [
{
"operationId": "ADIDAS96",
"codeStock":"STO61177",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS99",
"codeStock":"STO69084",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO73106",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO77162",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "VPE_ULTIMA2",
"codeStock":"STO73220",
"companyName":"PPK",
"contractualTypology":"EN MANDAT",
"vatCode":"FR51442790366"
}
],
"virtualshipping": [
{
"operationId": "VPE_ULTIMA2",
"operationCode":"VPE_ULTIMA2",
"siteId":0,
"createdOn":"0001-01-01T00:00:00"
}
]
}
在TypeScript代码(即Vuex)的axios端:
const isDevEnvironment=process.env.NODE\u env&&process.env.NODE\u env==“开发”;
const operationsApiUrl=`${process.env.VUE_APP_API_URL}/v1/operations`;
const suggestionCount=10;
常数minLength=3;
//看https://github.com/typicode/json-server/issues/530#issuecomment-512733522
函数getOperationCodeParams(searchedOperationCode:string):AxiosRequestConfig{
如果(环境){
返回{
参数:{
类似代码:searchedOperationCode,
},
};
}
返回{
参数:{
代码:searchedOperationCode,
},
};
}
// [...]
async[Actions.fetchOperationCodeSuggestions]({commit},searchedOperationCode:string):承诺{
if(searchedOperationCode&&searchedOperationCode.length>=minLength){
试一试{
常量url=`${operationsApiUrl}/`;
const result=await axios.get(url,getOperationCodeParams(searchedOperationCode));
const operationCodesFetched=结果数据;
const operationCodes=[…operationCodesFetched].map((o)=>o.operationCode).sort().slice(0,suggestionCount);
提交(translations.setOperationCodeSuggestions、operationCodes);
}抓住{
提交(translations.setOperationCodeSuggestions,[]);
}
}否则{
提交(translations.setOperationCodeSuggestions,[]);
}
}
通过以下配置使其正常工作:
routes.json
{
"/api/v1/*": "/$1"
}
{
"operations": [
{
"code": "empty",
"operationCode": "EMPTY"
},
{
"code": "adidas96",
"operationCode": "ADIDAS96"
},
{
"code": "adidas99",
"operationCode": "ADIDAS99"
},
{
"code": "adidas101",
"operationCode": "ADIDAS101"
},
{
"code": "vpe_ultima2",
"operationCode": "VPE_ULTIMA2"
}
],
"stockaccountingdata": [
{
"operationId": "ADIDAS96",
"codeStock":"STO61177",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS99",
"codeStock":"STO69084",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO73106",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO77162",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "VPE_ULTIMA2",
"codeStock":"STO73220",
"companyName":"PPK",
"contractualTypology":"EN MANDAT",
"vatCode":"FR51442790366"
}
],
"virtualshipping": [
{
"operationId": "VPE_ULTIMA2",
"operationCode":"VPE_ULTIMA2",
"siteId":0,
"createdOn":"0001-01-01T00:00:00"
}
]
}
db.json
{
"/api/v1/*": "/$1"
}
{
"operations": [
{
"code": "empty",
"operationCode": "EMPTY"
},
{
"code": "adidas96",
"operationCode": "ADIDAS96"
},
{
"code": "adidas99",
"operationCode": "ADIDAS99"
},
{
"code": "adidas101",
"operationCode": "ADIDAS101"
},
{
"code": "vpe_ultima2",
"operationCode": "VPE_ULTIMA2"
}
],
"stockaccountingdata": [
{
"operationId": "ADIDAS96",
"codeStock":"STO61177",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS99",
"codeStock":"STO69084",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO73106",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "ADIDAS101",
"codeStock":"STO77162",
"companyName":"ICM (INTERNATIONAL)",
"contractualTypology":"ACHAT/REVENTE",
"vatCode":null
},
{
"operationId": "VPE_ULTIMA2",
"codeStock":"STO73220",
"companyName":"PPK",
"contractualTypology":"EN MANDAT",
"vatCode":"FR51442790366"
}
],
"virtualshipping": [
{
"operationId": "VPE_ULTIMA2",
"operationCode":"VPE_ULTIMA2",
"siteId":0,
"createdOn":"0001-01-01T00:00:00"
}
]
}
在TypeScript代码(即Vuex)的axios端:
const isDevEnvironment=process.env.NODE\u env&&process.env.NODE\u env==“开发”;
const operationsApiUrl=`${process.env.VUE_APP_API_URL}/v1/operations`;
const suggestionCount=10;
常数minLength=3;
//看https://github.com/typicode/json-server/issues/530#issuecomment-512733522
函数getOperationCodeParams(searchedOperationCode:string):AxiosRequestConfig{
如果(环境){
返回{
参数:{
类似代码:searchedOperationCode,
},
};
}
返回{
参数:{
代码:searchedOperationCode,
},
};
}
// [...]
async[Actions.fetchOperationCodeSuggestions]({commit},searchedOperationCode:string):承诺{
if(searchedOperationCode&&searchedOperationCode.length>=minLength){
试一试{
常量url=`${operationsApiUrl}/`;
const result=await axios.get(url,getOperationCodeParams(searchedOperationCode));
const operationCodesFetched=结果数据;
const operationCodes=[…operationCodesFetched].map((o)=>o.operationCode).sort().slice(0,suggestionCount);
提交(translations.setOperationCodeSuggestions、operationCodes);
}抓住{
提交(translations.setOperationCodeSuggestions,[]);
}
}否则{
提交(translations.setOperationCodeSuggestions,[]);
}
}