Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS:TypeError:Buffer不是函数(但它是函数!)_Javascript_Node.js_Express_Typeerror - Fatal编程技术网

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

Javascript NodeJS:TypeError:Buffer不是函数(但它是函数!),javascript,node.js,express,typeerror,Javascript,Node.js,Express,Typeerror,对这件事有点困惑。我使用的是非常典型的Node+Express设置,我的许多脚本都在处理缓冲区对象,基本上在任何地方都可以正常工作。除了一个脚本之外,它定义了从ElasticSearch数据存储检索文档的路径。我试图通过解码文件数据的base64编码字符串来创建一个新的缓冲区对象,然后将其发送到浏览器。但是,即使在调用newbuffer(fildata,'base64')之前的console.log会像您期望的那样打印出缓冲区函数的描述,我还是会得到一个异常“TypeError:Buffer不是

对这件事有点困惑。我使用的是非常典型的Node+Express设置,我的许多脚本都在处理缓冲区对象,基本上在任何地方都可以正常工作。除了一个脚本之外,它定义了从ElasticSearch数据存储检索文档的路径。我试图通过解码文件数据的base64编码字符串来创建一个新的缓冲区对象,然后将其发送到浏览器。但是,即使在调用
newbuffer(fildata,'base64')
之前的console.log会像您期望的那样打印出缓冲区函数的描述,我还是会得到一个异常“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输出):

{缓冲区:
{[函数:缓冲区]
总人数:8192,
isBuffer:[函数:isBuffer],
比较:[函数:比较],
ISencode:[函数],
concat:[函数],
ByTeleLength:[函数:ByTeleLength]},
SlowBuffer:[函数:SlowBuffer],
检查最大字节数:50,
Kmax长度:2147483647}
/Users/myusername/mynodeproject/routes/retrieve.js:50
res.send(新缓冲区(doc[“filedata”],“base64”);
^
TypeError:缓冲区不是函数
在/Users/myusername/mynodeproject/routes/retrieve.js:50:15
在响应时(/Users/myusername/mynodeproject/node_modules/elasticsearch/src/lib/transport.js:301:9)
在checkRespForFailure(/Users/myusername/mynodeproject/node_modules/elasticsearch/src/lib/transport.js:239:7)
在HttpConnector上。(/Users/myusername/mynodeproject/node_modules/elasticsearch/src/lib/connectors/http.js:155:7)
在IncomingMessage.wrapper(/Users/myusername/mynodeproject/node_modules/lodash/index.js:3095:19)
在emitNone(events.js:72:20)
在IncomingMessage.emit(events.js:166:7)
在endReadableNT(_stream_readable.js:905:12)
在doNTCallback2(node.js:452:9)
在进程中调用(node.js:366:17)

读取控制台输出时,
require(“buffer”)
的返回值不是函数。相反,它是一个有两种方法的对象:
Buffer
SlowBuffer

在您的例子中,
Buffer
就是使用这两种方法的对象。您应该改为执行
var Buffer=require('Buffer')。Buffer(假设您也不需要
SlowBuffer

如中所述,您甚至不需要
要求(“缓冲区”)
。它自动作为全局in节点提供。

来自:

Buffer类是一个全局类,因此很少需要('Buffer')

如果我删除
var Buffer=require('Buffer')
行,您的代码对我有效


看起来,当您确实需要buffer时,buffer变量是一个包含
buffer
构造函数的对象,因此
newbuffer.buffer(doc[“filedata”],“base64”)也有效。

D'oh!是的,显然今天早上我需要更多的咖啡!谢谢
{ 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.<anonymous> (/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)