Node.js 如何配置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

我检查了json服务器以添加配置:

因为我想在开发环境中的应用程序中添加对查询字符串参数的支持

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,[]);
}
}