Интерполяция JSON: необходимо вставить переменные в файл .json из файла .js для REST (POST) - PullRequest
0 голосов
/ 29 августа 2018

Что я пытаюсь сделать:

1) Публикация в моем API с моим файлом .json (, который содержит все необходимое мне тело )

2) Из файла .json я хочу использовать переменную типа $ {value}, чтобы затем взять это значение из моего файла .js и заменить переменную в файле .json

  • В настоящее время используется NodeJS с Mocha. У меня есть вызов 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 голосов
/ 30 августа 2018

Сначала вам нужно будет прочитать ваш JSON-файл в вашем коде Javascript. Лучший способ сделать это - использовать встроенный модуль fs.

  1. Импорт FS первым:

    const fs = require('fs');

Затем загрузите JSON из вашего файла в переменную и сохраните этот JSON как объект Javascript. Важно не смущаться тем фактом, что объекты Javascript и JSON - это не одно и то же. Вы можете проверить это здесь.

  1. Чтобы импортировать файл JSON с помощью команды fs, выполните что-то вроде этого:

    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) { ... });

Я использовал в основном общие примеры, но это в основном то, что вы ищете. Дайте мне знать, если у вас есть какие-либо вопросы о его реализации.

0 голосов
/ 30 августа 2018

Что вы пытаетесь: изменить json файл ? Это возможно, но я не думаю, что это то, чего вы пытаетесь достичь.

То, чего вы хотите добиться, - это чистый код, чтобы вы извлекли свой блок запроса во внешний файл, верно?

Итак, я думаю, что путь здесь заключается в создании файла 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, который вы можете пропустить через тело вашего запроса

...