Javascript TypeError:var不是函数

时间:2018-05-15 15:08:41

标签: javascript node.js events

使用Vanilla NodeJS。 (即没有框架)

在名为index.js的{​​{1}}中有一个我想在事件处理程序中使用的函数。

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
};
     

proto :错误{constructor :, name:" TypeError",message:"",...}

我不确定为什么它没有按预期运行。为什么函数没有正确定义,或者在调用时没有运行?

1 个答案:

答案 0 :(得分:-1)

我建议像这样输出你的功能:

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");
});