我要做什么:
1)使用.json文件(包含我需要的整个主体)发布到我的API
2)从.json文件中,我想使用$ {value}之类的变量,然后从我的.js文件中获取该值,并替换.json文件中的var
// for brevity - I removed the other dependencies
const jsonconfig_post = require('./POST.json'); // this is my .json file
describe('\nPOST <TO MY ENDPOINT> \n', function() {
const apiBase = `<MY ENDPOINT>`;
const cookieJar = request.jar();
var nameDate = new time.Date();
beforeEach(function(done) {
this.timeout(5000);
common.verifyLogin(cookieJar, done); //calls my login code
});
it('POST 1: <MY ENDPOINT> - POST', function(done) {
const title = 'NodeJS_Project';
let requestBody = jsonconfig_post(title + nameDate);
//NodeJS_Project is the Var name and nameDate is the appended date
this.timeout(5000);
const opts = {
jar: cookieJar,
uri: `${apiBase}/<MY ENDPOINT>`,
method: 'POST',
json: true,
headers: {
"Content-Type": "application / json",
"Accept": "text / json"
},
body: (requestBody), // POST to my API with this
};
request(opts).then(() => {
opts.body = {};
console.log(requestBody);
done();
}).catch(done);
});
});
{
"title": "${title}",
"Id": "<SOME ID>"
}
学习NodeJS / Mocha并到目前为止真的很喜欢。我可以在使用.json文件之外进行这项工作-但使用.json文件可以使.js看起来非常容易。简单干净。这是一个小例子-其他POST调用使用了巨大的json主体(许多嵌套元素),因此在这种情况下使用.json非常有价值,例如替换.json文件中的许多变量/值。我知道这可以工作,我希望吗?我目前有400,可以看到JSON没有正确传递到端点-或者-我只是发布了变量$ {title}(不是我想要的)。任何帮助将不胜感激。 注意-我已经尝试过使用JSON.parse / stringify等的其他方法,但是失败了-或者-我没有正确使用(肯定是这种情况:))。 提前致谢 干杯! -E
答案 0 :(得分:0)
您要尝试的是:更改json 文件? 这是可能的,但我认为这不是您要实现的目标。
您想要实现的是干净的代码,因此您将requestBody提取到了外部文件中,对吧?
所以我认为这里的解决方法是创建一个javascript文件(post.js),在其中创建要导出的对象 jsonconfig_post
exports.jsonconfig_post = {
title: '${title}',
Id: '<SOME ID>',
};
所以现在您可以像
一样在代码中导入该对象。const { jsonconfig_post } = require('./POST.js');
这是您可以这样修改的对象
const jsonconfigWithValues = Object.assign({}, jsonconfig_post, { title: 'NodeJS_Project' });
现在您有了一个json对象,可以通过请求的正文传递
答案 1 :(得分:0)
首先,您将必须在Javascript代码中读取JSON文件。最好的方法是使用内置的fs
模块。
首先导入FS:
const fs = require('fs');
然后将文件中的JSON加载到变量中,并将该JSON作为Javascript对象存储。重要的是,不要因Javascript对象和JSON不是同一件事而感到困惑。您可以查看here.
要使用fs导入JSON文件,请执行以下操作:
var importedData = JSON.parse(fs.readFileSync('POST.json', 'utf8'));
您也可以异步读取文件,但我假设您现在想同步进行所有操作。
现在,您要替换占位符数据,就像普通对象一样。尽管从技术上讲,您可以遍历对象并使用${TITLE}
搜索字符串,但实际上并没有像模板那样替换该值,但是我们将在此处直接这样做。像这样:
importedData.title = 'TITLE';
现在将该对象写回到您的原始文件中:
fs.writeFileSync('POST.json', importedData, 'utf8' function(err) {
if(err) {
console.log(err);
}
});
现在,您可以使用新的JSON文件将发帖请求发送到服务器。
it('POST 1: <MY ENDPOINT> - POST', function(done) {
...
});
我主要使用了一般示例,但这基本上就是您要寻找的。让我知道您是否对实施它有任何疑问。