等效于 Node.JS 的 file_get_contents()

Posted

技术标签:

【中文标题】等效于 Node.JS 的 file_get_contents()【英文标题】:file_get_contents() equivalent for Node.JS 【发布时间】:2012-02-05 05:28:28 【问题描述】:

我想知道在 Node.JS 模块或其他地方是否有任何 file_get_contents() 等价物。它必须锁定进程直到下载完成,因此 Node.js 中现有的 request() 代码将无法工作。虽然它不需要读入字符串,但锁定、同步的性质很重要。

如果不存在,通过 OS 模块使用 CURL 是处理相同进程的有效方法吗?

【问题讨论】:

你想做什么?告诉我们您的目标是什么,而不是您希望如何实现。 为什么你认为你必须锁定整个过程? 如果你的需求是锁定整个流程,那么 NodeJS 绝对不是适合你的技术。为什么不只使用 php?然后你可以使用file_get_contents() 本身。 @BryanRoss:这不是要求,我会说这更像是缺乏知识。 是的,我不认为异步只是...可能是一种后天的品味类型? 【参考方案1】:

fs.readFileSync 似乎按照您的要求进行。来自手册:

fs.readFileSync(文件名,[选项])

fs.readFile 的同步版本。返回filename 的内容。

如果指定了encoding 选项,则此函数返回一个字符串。否则返回一个缓冲区。

【讨论】:

遗憾的是,fs.readFileSync()file_get_contents() 不同,不适用于 Web url。我认为 OP 是在寻求一种获取外部资源的方法,而不是本地文件。【参考方案2】:

很适合在应用启动时加载一些 conf 文件,但它的同步!!!!

const fs = require('fs');
var contents = fs.readFileSync('inject.txt').toString();

【讨论】:

【参考方案3】:

不,没有。异步执行:执行操作,当下载完成并将其全部缓冲到一个位置时,发出事件或调用回调以对整个 blob 执行操作。

【讨论】:

“将其全部缓冲到一个地方” - 有时您也可以对重新分块的流进行操作。 @KyleHotchkiss:您认为您完全了解 node.js 的工作原理吗?事件模式和异步模式? 从未声称完全理解 node.js。不要认为这是试验它或就 SO 提出问题的要求。来自浏览器 JS,仍有很多限制需要处理。 其实不难做到:这一切都是几行代码。但是当事情发生时,node 不会让你停止这个世界:如果有事要做,node 会运行它。如果没有,它会在等待时完全停止。但是您通常可以通过在网络响应并且各个部分组合在一起之前不继续操作来做到这一点。有时以这种方式工作有点像建立多米诺骨牌然后将它们全部同时倒下。但它确实有效,并且在等待期间释放了进程来做很多其他事情。

以上是关于等效于 Node.JS 的 file_get_contents()的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js async forEachSeries 时是不是有“继续”的等效语句?

Node.js 中的 Hash_hmac 等效项

包装 node.js 同步函数是不是使其执行与其等效的异步相同?

Deno 中的 Node.js 的 __dirname 和 __filename 等效项

尝试使用 node.js supertest 发布 multipart/form-data

centos / amazon linux / rhel的authbind等效项