重新定义 JsonClient URL x 路径
Restify JsonClient URL x Path
当我在节点中创建 JsonClient
时,我执行以下操作:
var client = restify.createJsonClient({
url: 'https://www.domain.com:4321/api'
});
完成后,我会这样调用:
client.post('/service/path', { });
这似乎是对的。我希望调用的路径类似于 https://www.domain.com:4321/api/service/path
。然而,正在发生的事情是客户端正在丢弃 /api
基本路径并调用 https://www.domain.com:4321/service/path
。
我不明白 - 我正在将客户端 URL 插入到配置文件中,这样我就可以毫不费力地更改主机;现在我需要一个基本路径,我需要更改代码和配置。
如果你在 restify JsonClient 的东西周围放置一个包装器,你可以用最少的代码更改来完成它,我认为配置会按照你想要的方式工作。
创建库文件myClient.js
'use strict';
var restify = require('restify');
var jsonClient = null;
module.exports = {
createJsonClient: function(opts){
var opts = opts || {};
var url = opts.url;
var parts = url.split('/');
var main_url = parts[0] + '//' + parts[2];
var basePath = parts[3] ? parts[3] : '';
jsonClient = restify.createJsonClient({url: main_url});
return {
get: function(path, cb){
var adjusted_path = '/' + basePath + path;
jsonClient.get(adjusted_path, function(err2, req2, res2, obj2){
return cb(err2, req2, res2, obj2);
});
}
}
}
}
那就这样用吧
var myClientWrapper = require('./lib/myClient');
var client = myClientWrapper.createJsonClient({url: 'http://localhost:8000/api'});
client.get('/service/path/one', function(err, req, res, obj){
if(err){
console.log(err.message);
return;
}
console.log(res.body);
});
它可以使用更多的错误检查,url 解析有点脆弱,但它确实有效。我试过了。当然,我只包装了 get
函数,但您可以看到它对其他函数的作用。
当我在节点中创建 JsonClient
时,我执行以下操作:
var client = restify.createJsonClient({
url: 'https://www.domain.com:4321/api'
});
完成后,我会这样调用:
client.post('/service/path', { });
这似乎是对的。我希望调用的路径类似于 https://www.domain.com:4321/api/service/path
。然而,正在发生的事情是客户端正在丢弃 /api
基本路径并调用 https://www.domain.com:4321/service/path
。
我不明白 - 我正在将客户端 URL 插入到配置文件中,这样我就可以毫不费力地更改主机;现在我需要一个基本路径,我需要更改代码和配置。
如果你在 restify JsonClient 的东西周围放置一个包装器,你可以用最少的代码更改来完成它,我认为配置会按照你想要的方式工作。
创建库文件myClient.js
'use strict';
var restify = require('restify');
var jsonClient = null;
module.exports = {
createJsonClient: function(opts){
var opts = opts || {};
var url = opts.url;
var parts = url.split('/');
var main_url = parts[0] + '//' + parts[2];
var basePath = parts[3] ? parts[3] : '';
jsonClient = restify.createJsonClient({url: main_url});
return {
get: function(path, cb){
var adjusted_path = '/' + basePath + path;
jsonClient.get(adjusted_path, function(err2, req2, res2, obj2){
return cb(err2, req2, res2, obj2);
});
}
}
}
}
那就这样用吧
var myClientWrapper = require('./lib/myClient');
var client = myClientWrapper.createJsonClient({url: 'http://localhost:8000/api'});
client.get('/service/path/one', function(err, req, res, obj){
if(err){
console.log(err.message);
return;
}
console.log(res.body);
});
它可以使用更多的错误检查,url 解析有点脆弱,但它确实有效。我试过了。当然,我只包装了 get
函数,但您可以看到它对其他函数的作用。