Как вызвать функцию из другого файла js в блоке ответа mountebank

У меня вопрос по оформлению ответа мошенника. Мне не удалось вызвать функцию из другого js-файла в блоке кода ответа. Кто-нибудь может дать мне подсказку?

Мой js-файл: utils.js

function getRandomCharAndNum(min, max){
    let returnStr = "";
    const range = (max ? Math.round(Math.random() * (max-min)) + min : min);
    const charStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

    for(let i=0; i<range; i++){
        const index = Math.round(Math.random() * (charStr.length-1));
        returnStr = returnStr + charStr.substring(index,index+1);
    }
    return returnStr;
}

Код ответа в mountebank такой

const utils = require('./utils/utils');
responses: [{
    is: {
        statusCode: 200,
        headers: {
            "Consent-Type": "application/json"
        }
    },
    _behaviors: {
        decorate: `(config) => {
                config.response.body = { 
                   id: utils.getRandomCharAndNum()
                 };
        }`
    }
}]

Ошибка: {"errors":[{"message":"Converting circular structure to JSON","name":"TypeError","stack":"TypeError: Converting circular structure to JSON\n at JSON.stringify (<anonymous>)\n at responsePromise.then.response (/Users/xinxing.cheng/Documents/app/node_modules/mountebank/src/models/behaviors.js:251:48)\n at _fulfilled (/Users/xinxing.cheng/Documents/app/node_modules/q/q.js:854:54)\n at /Users/xinxing.cheng/Documents/app/node_modules/q/q.js:883:30\n at Promise.promise.promiseDispatch (/Users/xinxing.cheng/Documents/app/node_modules/q/q.js:816:13)\n at /Users/xinxing.cheng/Documents/app/node_modules/q/q.js:877:14\n at runSingle (/Users/xinxing.cheng/Documents/app/node_modules/q/q.js:137:13)\n at flush (/Users/xinxing.cheng/Documents/app/node_modules/q/q.js:125:13)\n at process._tickCallback (internal/process/next_tick.js:61:11)"}]}


person Xinxing Cheng    schedule 15.11.2019    source источник
comment
Ваша ошибка не связана с заголовком вашего вопроса. Проблема здесь в том, что где-то вы или ваши зависимости пытаетесь использовать JSON.stringify для объекта, который имеет циклическую ссылку (т.е. подсвойство, которое ссылается на его родителя)   -  person Seblor    schedule 15.11.2019


Ответы (1)


Вы должны либо встроить функцию getRandomCharAndNum в функцию декорирования, либо включить ее непосредственно в функцию декорирования. Похоже, у вас есть некоторая оболочка (не показана), которая вызывает mountebank, но вы не можете включить соответствующую вспомогательную функцию вне декоратора.

person bbyars    schedule 17.11.2019
comment
Спасибо, Brandon Byars@bbyars, я включил функцию getRandomCharAndNum внутрь функции декорирования, и это сработало. И мне интересно, как я могу инкапсулировать функцию в mb? У меня есть некоторые службы, которые нужно издеваться, и некоторые функции похожи. Вот я и хочу их подобрать и не надо писать в каждом сервисе. Вот почему я хочу знать, как вызвать другую функцию js в файле mb. Не могли бы вы дать мне подсказку? - person Xinxing Cheng; 19.11.2019