- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我更喜欢使用 Promise 而不是回调,因此我使用了 util.promisify
。
`use strict`;
const util = require(`util`),
request = util.promisify(require(`request`)),
fs = require(`fs`).promises;
module.exports = async (message, api) => {
const end = api.sendTypingIndicator(message.threadID);
const data = await request({ url: `https://api.thecatapi.com/v1/images/search`, followAllRedirects: true });
const [json] = JSON.parse(data.body);
console.log(fs);
const image = await request(json.url);
await fs.writeFile(`kitty.png`, image.body, `binary`);
const attachments = {attachment: fs.createReadStream(`kitty.png`)};
await fs.unlink(`kitty.png`);
end();
return attachments;
};
我在 const attachments = {attachment: fs.createReadStream('kitty.png')};
行收到 TypeError: fs.createReadStream is not a function
。我该如何解决这个问题?
最佳答案
fs.promises
不是 fs
的超集。虽然它用返回 Promise 的相同核心名称的方法替换了 fs
上的一些方法,但它并没有包含普通 fs
所具有的所有内容。
createReadStream()
是常规 require('fs')
对象上的方法,而不是 require('fs').promises
上的方法。
这就是为什么不建议您这样做:
fs = require('fs').promises;
因为这样会误导所有人,包括你自己,认为 fs
是核心的 Nodejs fs 模块。事实并非如此。
相反,我会推荐这个:
const util = require('util'),
request = util.promisify(require('request')),
fs = require('fs'),
fsp = fs.promises;
然后,您可以根据需要使用 fs
和 fsp
,包括 fs.createReadStream()
。
是的,这看起来确实有点不整洁。也许 fs 模块到 Promise 的转换只是部分完成,有一天你可以使用 fs.promises 作为完整的替代品 - 我真的不知道开发该模块的人们的意图。目前,您必须使用这两个版本才能访问完整功能。
<小时/>另外,请注意 util.promisify(require('request'))
。请求函数不使用标准异步回调签名 (err, result)
,因为它将三个参数传递给回调 (err, response, body)
,而不是通常的两个。有些请求派生模块已经被 Promisified(request-promise
和 request-promise-native
)完全准备好与 Promise 一起使用。
此外,request()
模块现已弃用(截至 2020 年,不会再获得任何新功能),替代方案列表(所有这些都支持 Promise 接口(interface))为 here .
关于javascript - 类型错误 : fs. createReadStream 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699731/
我想收到您对使用 fp-ts 的 TaskEither 使用的反馈或其他用于学习目的的函数式编程库: 我在处理nodejs流时使用Promise,以这种方式使用Promise是一个好的解决方案吗?最直
我正在尝试打开一个 img 文件并通过 http 发送它。我读到最好的方法是 creatReadStream,因为它是异步的,而且性能更好。 这是我的代码: var file = fs.createR
我正在尝试执行以下操作: 逐行流式传输 csv 文件。 修改每一行中包含的数据。 流式传输和处理所有行后,完成并继续执行下一个任务。 问题是.on("end")在 .on("data") 之前发生火灾
我是 NodeJS 的新手,我正在尝试从麦克风直播到 MP3 文件,字节正在实时写入 MP3 文件,我希望用户能够真正播放这个 MP3 流文件-瓷砖也。 到目前为止,我为阅读流所做的(当然是在伟大社区
我正在尝试读取上传的 .csv 文件并将其存储在数组中,以便将数据批量插入到我的数据库中,我正在使用 csv-parser package 和用于文件流的 fs 。 router.post('/fil
我现在正在学习 Node.js,使用“Beginning Node.js”教科书。 书中的示例在命令提示符下无法正常执行。 (我正在使用 Ubuntu 18.04 和 Node v9.4.0,这本书是
如何设置一个等于 fs.createReadStream 返回的数据的变量,以便我可以打印出该变量,然后获取文件内容。 var rs = fs.createReadStream('file.txt',
https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options .我还有一个一般性问题。 我可以假设除非文档中另有说明,否则提到的
为了使用 nodejs 逐行读取文本文件,我有以下代码: var lineReader = require('readline').createInterface({ input: require(
我需要使用 formData 将 pdf 发送到 api。我下载了 pdf,登录后如下所示:如果我fs.writeFileSync它是完全可读的。但我想尝试将它传递给 api 而不必用 fs 编写它,
我正在使用 DropBox API 上传文件。要将文件上传到保管箱,我将执行以下步骤: 首先将文件从 form 上传到服务器上的本地目录。 使用fs.createReadStream从本地目录读取文件
根据 official document , createReadStream 可以接受缓冲区类型作为 path 参数。 但是很多问答只提供了如何通过string发送参数的解决方案,而不是buffer
抱歉,我有几个关于 createReadStream() 的问题。 基本上,我正在做的是动态构建一个文件,并在完成后使用 fs 将其流式传输给用户。我正在使用 .pipe() 来确保我的节流正确(如果
我正在尝试使用我的 NodeJS 应用程序将文件从我的 s3 存储桶发送到客户端。这是我目前所拥有的: import { S3 } from '@aws-sdk/client-s3'; const B
我正在运行一个 SSR React node.js 服务器,我需要一些关于如何解决我的问题的建议。我的 node.js 服务器崩溃/重新启动错误,如窗口未定义等,而不是仅仅记录并打印出 500 错误消
我正在尝试编写一个测试用例,以判断此代码何时会发出错误: s3.getObject({ Bucket: mediaBucket, Key: mediaId, }).create
我更喜欢使用 Promise 而不是回调,因此我使用了 util.promisify。 `use strict`; const util = require(`util`), request
目前,我正在尝试向 on 事件传递一个额外的参数,从 CSV 文件获取数据后将触发该事件。我尝试将其作为额外参数添加到回调函数中,但它总是未定义。 fs.createReadStream(values
我尝试了这个简单的代码 var fs = require('fs'); var stream = fs.createReadStream(fileName); stream.on('readable'
如果我只想一次读取 10 个字节,或者一次读取一行数据(查找换行符),是否可以像这样传递 fs.createReadStream() 选项 var options = {} var strea
我是一名优秀的程序员,十分优秀!