【发布时间】:2018-02-20 16:51:13
【问题描述】:
我正在使用 CouchDB 2.1.1 在 NodeJS 中工作。
我正在使用 http.request() 方法通过 CouchDB API 设置各种配置设置。
这是他们的 API 参考,是的,我读过:
这是一个设置日志记录级别的工作请求示例:
const http = require('http');
var configOptions = {
host: 'localhost',
path: '/_node/couchdb@localhost/_config/',
port:5984,
header: {
'Content-Type': 'application/json'
}
};
function setLogLevel(){
configOptions.path = configOptions.path+'log/level';
configOptions.method = 'PUT';
var responseString = '';
var req = http.request(configOptions, function(res){
res.on("data", function (data) {
responseString += data;
});
res.on("end", function () {
console.log("oldLogLevel: " + responseString);
});
});
var data = '\"critical\"';
req.write(data);
req.end();
}
setLogLevel();
我不得不转义所有引号等,这是意料之中的。
现在我正在尝试让 CouchDb 接受压缩设置。
问题是我试图将相同的请求复制到不同的设置,但该设置没有简单的结构,尽管它似乎也“只是一个字符串”。
CouchDB API 就无效的 JSON 格式向我大喊大叫,我尝试了一大堆转义序列,并尝试以各种方式解析 JSON,以使其按照我认为的方式运行。
我可以使用Chrome的Advanced Rest Client发送这个payload,并且成功了:
Request Method: PUT
Request URL: http://localhost:5984/_node/couchdb@localhost/_config/compactions/_default
Request Body: "[{db_fragmentation, \"70%\"}, {view_fragmentation, \"60%\"}, {from, \"23:00\"}, {to, \"04:00\"}]"
这会返回“200 OK”
当我在我的节点应用程序中执行以下函数时,我得到以下响应:
{"error":"bad_request","reason":"invalid UTF-8 JSON"}
function setCompaction(){
configOptions.path = configOptions.path+'compactions/_default';
configOptions.method = 'PUT';
var responseString = '';
var req = http.request(configOptions, function(res){
res.on("data", function (data) {
responseString += data;
});
res.on("end", function () {
console.log("oldCompaction: " + responseString);
});
});
var data = "\"[{db_fragmentation, \"70%\"}, {view_fragmentation, \"60%\"}, {from, \"23:00\"}, {to, \"04:00\"}]\"";
req.write(data);
req.end();
}
有人可以指出我在这里缺少什么吗?
提前致谢。
【问题讨论】:
标签: json node.js escaping couchdb config