我正在尝试在 NodeJS 中构建一个 API 代理,它向外部第三方 API 发出请求。API 端点需要将名为"pages=(int)"的参数附加到每个请求。现在,此参数必须始终是请求中的最后一个参数,并且我使用的代理代码将"api_key"参数作为最后一个参数附加。
因此,当我向本地主机/趋势/数据/日&页面=1 提出请求时
它像这样解析
/趋势/数据/日&页=1?api_key=测试键123
我怎么把它变成这样
/趋势/数据/天?api_key=testkey123&page=1
我的代码
索引.js
require('dotenv').config();
const config = require('./config/config');
const express = require('express');
const request = require('request');
const cors = require('cors');
const app = express();
const port = config.port;
app.use(cors());
app.use('/', function(req, res) {
let url = config.apiUrl + req.url;
let query = config.assignKey(req.query);
req.pipe(request({ qs: query , uri: url })).pipe(res);
});
app.listen(port, () => {
console.log(`Listening on port:${port`);
});
配置.js
let config = {
apiUrl: process.env.API_URL,
apiKeyName: process.env.API_KEY_NAME,
apiKeyValue: process.env.API_KEY_VALUE,
port: process.env.PORT || 4000,
assignKey: assignKey
}
function assignKey(query){
let obj = {};
obj[config.apiKeyName] = config.apiKeyValue;
return Object.assign(query, obj);
}
module.exports = config;
首先应该提到的是,您正在使用一个对象来存储查询参数。在ES2015之前,没有指定订单。自 ES2015 以来,指定了字符串键的顺序(按插入顺序按时间顺序排列)。由于这是 Node.js因此编写旧标准应该不是问题。
您可以交换对象:
function assignKey(query){
let obj = {};
obj[config.apiKeyName] = config.apiKeyValue;
return Object.assign(obj, query);
}
电话会议
const query = { page: 1 };
const obj = { apiKey: 'abc' };
console.log(Object.assign(query, obj));
将所有属性从obj
复制到query
并返回query
。obj
的所有属性都在query
之后。如果交换对象
const query = { page: 1 };
const obj = { apiKey: 'abc' };
console.log(Object.assign(obj, query));
query
中的属性将复制到obj
并且您更改了顺序。
通常创建一个新对象会更好
const query = { page: 1 };
const obj = { apiKey: 'abc' };
console.log(Object.assign({}, obj, query));