我试图编写一个节点函数,它将根据传递给它的参数构建一个URL,然后使用request.js
进行HTTP GET。
只要存在一个参数,我无法弄清楚如何最好地处理URL有效的事实。把我的功能作为
track = function(company, employee, app) {
var url = "http://127.0.0.1:8000/?"+"company="+company+"&app="+app+"&employee="+employee;
request(url, function (error, response, body) {
})
};
所以如果我用所有3个参数调用它,结果URL将是有效的并由我的服务器处理
track("google", "larry", "chrome")
http://127.0.0.1:8000/?company=google&app=larry&employee=chrome
由这些参数的1/2/3组合产生的所有可能的URL也都有效
http://127.0.0.1:8000/?company=google
http://127.0.0.1:8000/?company=google&app=chrome
http://127.0.0.1:8000/?employee=larry
就目前而言,如果我只想发送employee=larry
的跟踪请求并通过track("larry")
调用该功能,则该网址将
http://127.0.0.1:8000/?company=larry&app=undefined&employee=undefined
如何编写我的函数以允许不同的参数排列?我知道我可以检查每个参数的存在,并为每个排列设置if / else条件,但我正在寻找更有效的方法。
答案 0 :(得分:3)
最终,你不能拥有固定的参数,省略它们,并期望函数知道如何处理它。只有两种方法可以做你想做的事情
arguments
)null
(或其他一些默认值)使用固定参数方法,您可以构建一个数组,然后使用join
为您提供一个很好的查询字符串
var params = [];
if (company) {
params.push("company=" + company);
}
if (employee) {
params.push("employee=" + employee);
}
if (app) {
params.push("app=" + app);
}
var url = "http://127.0.0.1:8000/?" + params.join("&");
...
track("google", "larry", "chrome");
track("google", null, "chrome");
track(null, "larry", null);
答案 1 :(得分:2)
传递对象而不是单独参数列表。
function track(params) {
var url = 'http://127.0.0.1:8000/?'
var arr = [];
for (var p in params) {
arr.push(p + '=' + params[p]);
}
request(url + arr.join('&'), function (err, res, body) { //... });
}
track({
name: 'Larry',
company: 'Google'
});