Немного сбит с толку этим. Я использую довольно типичную настройку Node+Express, и многие из моих скриптов манипулируют объектами Buffer, которые отлично работают практически везде. За исключением одного скрипта, который определяет маршрут для получения документа из хранилища данных ElasticSearch. Я пытаюсь создать новый объект Buffer, декодируя строку данных файла в кодировке base64, а затем отправляя ее в браузер. Но даже несмотря на то, что console.log непосредственно перед вызовом new Buffer(fildata,'base64')
выводит описание функции Buffer, как и следовало ожидать, я получаю исключение «TypeError: Buffer is not a function».
Соответствующий код:
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.<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)