nodejs为啥可以操作文件原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs为啥可以操作文件原理相关的知识,希望对你有一定的参考价值。

参考技术A 其实我觉得先回答另一个问题,为什么javascript不能直接操作文件。
如果要处理文件,待处理的文件必须经过用户上传,或者下载一个文件给用户。
主要还是安全性问题,不能让浏览器直接改硬盘上的文件,用户上传的文件可以读可以写。

nodejs虽然和js一样是V8引擎,但是它是服务器端的,就跟java,php一样,可以直接操作文件。

其实不管是js还是nodejs都可以操作文件的,原理就是根据请求文件的路径和文件名,从硬盘上读出来...我觉得你并不是想问这个,你想问的我一开始就说了。本回答被提问者采纳

NodeJS:为啥会跳过函数?

【中文标题】NodeJS:为啥会跳过函数?【英文标题】:NodeJS: Why is function being skipped?NodeJS:为什么会跳过函数? 【发布时间】:2017-11-10 15:46:58 【问题描述】:

我是 nodeJs 的新手,并试图理解为什么在这个文件--app.js--函数 main() 永远不会被执行。

如果我在函数之前添加一个 console.log 语句,它会被执行,但函数内部没有任何内容被执行。

我已经使用了调试器,果然,该功能被完全跳过了。

为什么会这样?是否有一些我忽略的节点组件?

'use strict';

const sendEmail = require('./send-email');

module.exports = main;

//console.log("This gets executed");

//this function never gets executed!
function main()

debugger
...some functionality...

【问题讨论】:

你如何调用你的函数? 如果app.js 是您的入口脚本,Node.js 不会使用定义main 函数的模式,该函数会在执行时自动调用。整个入口脚本,从第 1 行第 1 个字符开始,是启动应用程序行为/逻辑的“主”代码。 【参考方案1】:

您在模块中定义了main,但没有调用main()。如果这是您的所有代码,您需要在代码末尾添加main() 以执行它。

【讨论】:

【参考方案2】:

你永远不会调用main函数。

把函数想象成一段被外包的代码,并给它一个名字。只要你不直呼它的名字,什么都不会发生。

因此,您需要在代码中的某处添加以下行:

main();

然后它就会工作。 (请注意,您应该在声明main 函数之后执行此操作。)

console.log 会自动执行,因为它不是函数中,而是已经在顶层。函数的声明也是如此。这就是为什么 Node.js 创建这个函数的原因,但你并没有告诉它实际用它做些什么。

实际上,由于 JavaScript 处理函数语句的方式,调用 main 也可以在声明之前完成,但我认为最好不要这样做。使用module.exports 也是如此,这也可以这样工作,但如果你在创建函数之后 这样做,我也会称它为更好的样式。

因此,长话短说,您的代码应如下所示:

'use strict';

const sendEmail = require('./send-email');

console.log("This gets executed");

function main()

  // ...


main();

module.exports = main;

这将为您运行 main 函数,并将其导出(如果您想从另一个文件运行相同的函数,这很有用)。

【讨论】:

是否有理由将 module.exports 行移到末尾? 这只是个人风格。基本上,您可以将它放在文件中的任何位置,但我喜欢将导出 always 放在文件的底部。这背后的逻辑是:首先定义所有私有的东西,然后定义所有公共的东西,然后将它们导出。但如前所述,这只是个人风格。【参考方案3】:
const sendEmail = require('./send-email');

…加载模块并将exports的值分配给sendEmail

这就是它的全部

exports 的值是一个函数。如果你想调用那个函数,那么你必须……调用它。

sendEmail();

【讨论】:

以上是关于nodejs为啥可以操作文件原理的主要内容,如果未能解决你的问题,请参考以下文章

nodeJs中为啥文件描述符fd是一个整数

深入Nodejs模块fs - 文件系统操作

关于NodeJs为啥要用mongoose操作mongodb

NodeJS文件操作

关于NodeJs为啥要用mongoose操作mongodb

为啥nodejs文件系统先读取控制台再读取文件