这个有点困惑.我正在使用一个非常典型的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")
是不是一个函数.相反,它是一个有两种方法的对象:Buffer
和SlowBuffer
.
在你的情况下,Buffer
是那个对象与这两种方法.你应该这样做var Buffer = require('buffer').Buffer;
(假设你也不需要SlowBuffer
).
如另一个答案所述,你甚至不需要require("buffer")
.它自动作为Node中的全局使用.
读你的控制台输出,返回值require("buffer")
是不是一个函数.相反,它是一个有两种方法的对象:Buffer
和SlowBuffer
.
在你的情况下,Buffer
是那个对象与这两种方法.你应该这样做var Buffer = require('buffer').Buffer;
(假设你也不需要SlowBuffer
).
如另一个答案所述,你甚至不需要require("buffer")
.它自动作为Node中的全局使用.