当前位置:  开发笔记 > 编程语言 > 正文

NodeJS:TypeError:Buffer不是一个函数(但它是一个函数!)

如何解决《NodeJS:TypeError:Buffer不是一个函数(但它是一个函数!)》经验,为你挑选了1个好方法。

这个有点困惑.我正在使用一个非常典型的Node + Express设置,我的许多脚本都在操作Buffer对象,它们在任何地方都可以正常工作.除了在一个脚本中,该脚本定义了从ElasticSearch数据存储中检索文档的路径.我正在尝试通过解码base64编码的文件数据字符串来创建一个新的Buffer对象,然后将其发送到浏览器.但即使在调用之前的console.log new Buffer(fildata,'base64')打印出Buffer函数的描述就像你期望的那样,我得到一个异常"TypeError:Buffer不是函数".

相关代码:

var Buffer = require('buffer');
// ... then in the route, inside the callback from the ElasticSearch get() method:
res.setHeader('Content-Type', doc["mimetype"]);
res.setHeader('Content-disposition', 'attachment; filename=' + doc["filename"]);
res.type(doc["mimetype"]);
console.log(Buffer); // Yep, definitely a function here!
res.send(new Buffer(doc["filedata"], 'base64'));

来自节点的输出(注意抛出异常之前的console.log输出):

{ Buffer:
   { [Function: Buffer]
     poolSize: 8192,
     isBuffer: [Function: isBuffer],
     compare: [Function: compare],
     isEncoding: [Function],
     concat: [Function],
     byteLength: [Function: byteLength] },
  SlowBuffer: [Function: SlowBuffer],
  INSPECT_MAX_BYTES: 50,
  kMaxLength: 2147483647 }
/Users/myusername/mynodeproject/routes/retrieve.js:50
                    res.send(new Buffer(doc["filedata"], 'base64'));
                             ^

TypeError: Buffer is not a function
    at /Users/myusername/mynodeproject/routes/retrieve.js:50:15
    at respond (/Users/myusername/mynodeproject/node_modules/elasticsearch/src/lib/transport.js:301:9)
    at checkRespForFailure (/Users/myusername/mynodeproject/node_modules/elasticsearch/src/lib/transport.js:239:7)
    at HttpConnector. (/Users/myusername/mynodeproject/node_modules/elasticsearch/src/lib/connectors/http.js:155:7)
    at IncomingMessage.wrapper (/Users/myusername/mynodeproject/node_modules/lodash/index.js:3095:19)
    at emitNone (events.js:72:20)
    at IncomingMessage.emit (events.js:166:7)
    at endReadableNT (_stream_readable.js:905:12)
    at doNTCallback2 (node.js:452:9)
    at process._tickCallback (node.js:366:17)

apsillers.. 8

读你的控制台输出,返回值require("buffer")不是一个函数.相反,它是一个有两种方法的对象:BufferSlowBuffer.

在你的情况下,Buffer是那个对象与这两种方法.你应该这样做var Buffer = require('buffer').Buffer;(假设你也不需要SlowBuffer).

如另一个答案所述,你甚至不需要require("buffer").它自动作为Node中的全局使用.



1> apsillers..:

读你的控制台输出,返回值require("buffer")不是一个函数.相反,它是一个有两种方法的对象:BufferSlowBuffer.

在你的情况下,Buffer是那个对象与这两种方法.你应该这样做var Buffer = require('buffer').Buffer;(假设你也不需要SlowBuffer).

如另一个答案所述,你甚至不需要require("buffer").它自动作为Node中的全局使用.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有