fix: db.follow breaks when couchdb is at a prefix #268
diff --git a/lib/nano.js b/lib/nano.js
index e957594..5fcb6d8 100644
--- a/lib/nano.js
+++ b/lib/nano.js
@@ -44,7 +44,7 @@
var rootPath = path.pathname.replace(/\/?$/, '/..');
if (db) {
- cfg.url = u.resolve(cfg.url, rootPath).replace(/\/?$/, '');
+ cfg.url = urlResolveFix(cfg.url, rootPath).replace(/\/?$/, '');
return db;
}
}
@@ -89,7 +89,7 @@
// http://wiki.apache.org/couchdb/HTTP_database_API#Naming_and_Addressing
if (opts.db) {
- req.uri = u.resolve(req.uri, encodeURIComponent(opts.db));
+ req.uri = urlResolveFix(req.uri, encodeURIComponent(opts.db));
}
if (opts.multipart) {
@@ -305,7 +305,7 @@
qs = {};
}
- qs.db = u.resolve(cfg.url, encodeURIComponent(dbName));
+ qs.db = urlResolveFix(cfg.url, encodeURIComponent(dbName));
if (typeof callback === 'function') {
return followAgent(qs, callback);
@@ -316,7 +316,7 @@
function _serializeAsUrl(db) {
if (typeof db === 'object' && db.config && db.config.url && db.config.db) {
- return u.resolve(db.config.url, encodeURIComponent(db.config.db));
+ return urlResolveFix(db.config.url, encodeURIComponent(db.config.db));
} else {
return db;
}
@@ -748,3 +748,10 @@
*/
nano.version = require('../package').version;
nano.path = __dirname;
+
+function urlResolveFix(couchUrl, dbName) {
+ if (/[^\/]$/.test(couchUrl)) {
+ couchUrl += '/';
+ }
+ return u.resolve(couchUrl, dbName);
+}