JSON插值:需要将.js文件中的变量注入.json文件中以进行REST(POST)

时间:2018-08-29 20:56:03

标签: json node.js mocha interpolation string-interpolation

我要做什么:

1)使用.json文件(包含我需要的整个主体)发布到我的API

2)从.json文件中,我想使用$ {value}之类的变量,然后从我的.js文件中获取该值,并替换.json文件中的var

  • 当前使用带有Mocha的NodeJS。我有我的API调用(下面的.js代码):

 // 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);
  });
});
  • 我的POST.json文件-在下面。我想拿$ {title}并将其替换为我的.js代码中的内容-“ NodeJS_Project”。

 {
 "title": "${title}",
 "Id": "<SOME ID>"
 }

学习NodeJS / Mocha并到目前为止真的很喜欢。我可以在使用.json文件之外进行这项工作-但使用.json文件可以使.js看起来非常容易。简单干净。这是一个小例子-其他POST调用使用了巨大的json主体(许多嵌套元素),因此在这种情况下使用.json非常有价值,例如替换.json文件中的许多变量/值。我知道这可以工作,我希望吗?我目前有400,可以看到JSON没有正确传递到端点-或者-我只是发布了变量$ {title}(不是我想要的)。任何帮助将不胜感激。 注意-我已经尝试过使用JSON.parse / stringify等的其他方法,但是失败了-或者-我没有正确使用(肯定是这种情况:))。 提前致谢 干杯! -E

2 个答案:

答案 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模块。

  1. 首先导入FS:

    const fs = require('fs');

然后将文件中的JSON加载到变量中,并将该JSON作为Javascript对象存储。重要的是,不要因Javascript对象和JSON不是同一件事而感到困惑。您可以查看here.

  1. 要使用fs导入JSON文件,请执行以下操作:

    var importedData = JSON.parse(fs.readFileSync('POST.json', 'utf8'));

您也可以异步读取文件,但我假设您现在想同步进行所有操作。

  1. 现在,您要替换占位符数据,就像普通对象一样。尽管从技术上讲,您可以遍历对象并使用${TITLE}搜索字符串,但实际上并没有像模板那样替换该值,但是我们将在此处直接这样做。像这样:

    importedData.title = 'TITLE';

  2. 现在将该对象写回到您的原始文件中:

    fs.writeFileSync('POST.json', importedData, 'utf8' function(err) { if(err) { console.log(err); } });

  3. 现在,您可以使用新的JSON文件将发帖请求发送到服务器。

    it('POST 1: <MY ENDPOINT> - POST', function(done) { ... });

我主要使用了一般示例,但这基本上就是您要寻找的。让我知道您是否对实施它有任何疑问。