Javascript TypeError: var не является функцией - PullRequest
0 голосов
/ 15 мая 2018

Работа с Vanilla NodeJS.(т.е. без фреймворка)

Есть функция в index.js с именем toData(), которую я хочу использовать внутри обработчика событий.

функция toData() экспортируется как экспорт по умолчанию вindex.js.Соответствующие части index.js выглядят так:

function pushToData(input, title) {
  data[title] = input;
  console.log(data);
  if (isDataFull()) {
    mainEvents.emit("format-export");
  }
}

module.exports = pushToData;

Файл, в который я импортирую и пытаюсь его использовать, выглядит следующим образом:

const mssql = require("mssql");
const events = new require("events");
const tagList = require("./tag");
const toData = require("./index");

const tagEvents = new events.EventEmitter();

const sqlAuth = {
   /*....SQL Auth Details....*/
};
tagEvents.on("b2bloaded", function(data) {
  data = tagList(data, "ESB", "CustomerID");
  toData(data, "B2B");
});
/*....Additional event handlers omitted due to similarity...*/

function generateSqlData(item) {
  const pool = new mssql.ConnectionPool(sqlAuth, err => {
    switch (item) {
      case "B2B":
        pool
          .request()
          .query(
            `select top (100) * from [AspDotNetStoreFrontB2B].[dbo].[Customer]`
          )
          .then(res => {
            tagEvents.emit("b2bLoaded", res.recordset);
          })
          .catch(err => console.error(err));
        break;
      /*....Other Cases Omitted as they operate similar....*/
      default:
        break;
    }
  });
}

module.exports = {
  generateSqlData
};

Большая проблема заключается в том, чтоЯ получаю:

null: TypeError: toData is not a function message: "toData is not a function" stack: "TypeError: toData is not a function
at EventEmitter.<anonymous> (c:\Users\rutherfordc\Documents\GitHub\Migratron\sql-actions.js:36:3)
at EventEmitter.emit (events.js:160:13)
at pool.request.query.then.res (c:\Users\rutherfordc\Documents\GitHub\Migratron\sql-actions.js:87:23)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:160:7)"

proto : Ошибка {конструктор:, имя: "TypeError", сообщение: "",…}

Я не уверен, почему он работает не так, как ожидалось.Почему функция не определена правильно или не работает при вызове?

1 Ответ

0 голосов
/ 15 мая 2018

Я предлагаю экспортировать вашу функцию следующим образом:

export.pushToData(input, title) {
  data[title] = input;
  console.log(data);
  if (isDataFull()) {
    mainEvents.emit("format-export");
  }
}

и используйте его так:

const mssql = require("mssql");
const events = new require("events");
const tagList = require("./tag");
const toData = require("./index");

const tagEvents = new events.EventEmitter();

const sqlAuth = {
   /*....SQL Auth Details....*/
};
tagEvents.on("b2bloaded", function(data) {
  data = tagList(data, "ESB", "CustomerID");
  toData.pushToData(data, "B2B");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...