javascript - 范围错误 : Maximum call stack size exceeded in node_modules -> elasticsearch

标签 javascript node.js firebase elasticsearch

在尝试编写要部署到 Firebase Function 上的函数时,我编写了以下代码:

'use strict';
const elasticsearch = require('elasticsearch');
const firebaseAdmin = require('firebase-admin');
const functions = require('firebase-functions');
const Promise  = require('promise');

const config = {
    firebaseUrl: FIREBASE_URL,
    elasticSearchUrl: ELASTICSEARCH_URL
};
// configure firebase
const serviceAccount = require("./serviceAccountKey.json");
firebaseAdmin.initializeApp({
  credential: firebaseAdmin.credential.cert(serviceAccount),
  databaseURL: config.firebaseUrl
});
const database = firebaseAdmin.database();
const client =  new elasticsearch.Client({
    host: config.elasticSearchUrl
});
exports.indexentry = functions.database.ref('/posts/{postid}/text').onWrite(event => {
  let data = event.data.val();
  let post_id = event.params.postid;

  let indexData = {
        index: "firebase",
        type: "posts",
        id: post_id,
        body: data
    }

  return client.index(indexData).then(response => {
    console.log('Response: ');
  });
});

我得到一个错误:

错误:解析您的函数触发器时出错。

RangeError: Maximum call stack size exceeded
    at Function.EventEmitter.listenerCount (events.js:440:38)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)
    at Function.EventEmitter.listenerCount (events.js:442:20)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)
    at Function.EventEmitter.listenerCount (events.js:442:20)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)
    at Function.EventEmitter.listenerCount (events.js:442:20)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)
    at Function.EventEmitter.listenerCount (events.js:442:20)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)
    at Function.EventEmitter.listenerCount (events.js:442:20)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)
    at Function.EventEmitter.listenerCount (events.js:442:20)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)
    at Function.EventEmitter.listenerCount (events.js:442:20)
    at Log.listenerCount (C:\Users\Dell\AppData\Local\Temp\fbfn_10872H41uMk66c53o\node_modules\elasticsearch\src\lib\log.js:68:25)

在 Github 上的一条评论中,我找到了一个修复方法: 它要求我在我的代码中的任何地方添加:

var EventEmitter = require('events').EventEmitter;
var Log = require('./node_modules/elasticsearch/src/lib/log');
Log.prototype.listenerCount = EventEmitter.prototype.listenerCount;

现在我得到一个错误:

Error: unknown error at respond (/user_code/node_modules/elasticsearch/src/lib/transport.js:234:15) at checkRespForFailure (/user_code/node_modules/elasticsearch/src/lib/transport.js:200:7) at HttpConnector.<anonymous> (/user_code/node_modules/elasticsearch/src/lib/connectors/http.js:155:7) at IncomingMessage.wrapper (/user_code/node_modules/elasticsearch/node_modules/lodash/index.js:3095:19) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:974:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickDomainCallback (internal/process/next_tick.js:122:9)
 Error: unknown error
    at respond (/user_code/node_modules/elasticsearch/src/lib/transport.js:234:15)
    at checkRespForFailure (/user_code/node_modules/elasticsearch/src/lib/transport.js:200:7)
    at HttpConnector.<anonymous> (/user_code/node_modules/elasticsearch/src/lib/connectors/http.js:155:7)
    at IncomingMessage.wrapper (/user_code/node_modules/elasticsearch/node_modules/lodash/index.js:3095:19)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

如何解决这个问题?

编辑

我按照第一个答案中的建议更新了 elasticsearch。现在我得到错误:

 Error: [mapper_parsing_exception] failed to parse
        at respond (/user_code/node_modules/elasticsearch/src/lib/transport.js:307:15)
        at checkRespForFailure (/user_code/node_modules/elasticsearch/src/lib/transport.js:266:7)
        at HttpConnector.<anonymous> (/user_code/node_modules/elasticsearch/src/lib/connectors/http.js:159:7)
        at IncomingMessage.bound (/user_code/node_modules/elasticsearch/node_modules/lodash/dist/lodash.js:729:21)
        at emitNone (events.js:91:20)
        at IncomingMessage.emit (events.js:185:7)
        at endReadableNT (_stream_readable.js:974:12)
        at _combinedTickCallback (internal/process/next_tick.js:74:11)
        at process._tickDomainCallback (internal/process/next_tick.js:122:9)

最佳答案

  1. 确保您使用的是最新版本的 Elasticsearch :npm install elasticsearch。在您的 package.json 文件中添加正确的依赖项,它应该是最新版本的 Elasticsearch ,或者使用命令,npm install elasticsearch@13.2.0 或任何其他版本。
  2. 您不需要实际覆盖 Log.prototype.listenerCount,elasticsearch 已经在内部为您完成了(因此,调用堆栈递归)。所以,删除这一行:

Log.prototype.listenerCount = EventEmitter.prototype

此外,虽然这与您的问题无关......在您的需求路径中包含 ./node_modules 是多余的。 Node 已经内置了一个模块搜索机制并为您完成。

关于javascript - 范围错误 : Maximum call stack size exceeded in node_modules -> elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737917/

相关文章:

ios - 使用 Firebase 链接 UIProgressView 以显示下载进度

swift - 如何正确使用queryOrderedByValue

javascript - javascript闭包函数的使用

javascript - JCarousel显示问题

javascript - 表单控件 : Pristine attribute is not being updated?

node.js - 错误: Cannot migrate models not attached to this datasource: loopback-datasource-juggler

javascript - 在 Chrome 中调试 .vue 组件

javascript - 使用 NodeJS 将开始和停止时间发布到 mysql(sequelize)

node.js - 给我的小搜索引擎一条 "no file was found"消息

firebase - 获取/使用 Firebase JWT