我在Windows 10上的 Visual Studio代码中尝试使用 powershell.exe 作为终端。
经过多次失败后,我在互联网上找到了最佳解决方案。
以下是我从互联网上获得的解决方案:
var fs = require('fs');
var contents = fs.readFileSync(process.argv[2]);
var lines = contents.toString().split('\n').length - 1;
console.log(lines);
我把它保存在一个文件myFirstIO.js中。但是,我尝试在 PowerShell 上运行它,我收到以下错误:
PS C:\Users\aps12\Desktop\Test\lyn> node myFirstIO.js
fs.js:640
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
TypeError: path must be a string or Buffer
at TypeError (native)
at Object.fs.openSync (fs.js:640:18)
at Object.fs.readFileSync (fs.js:508:33)
at Object.<anonymous> (C:\Users\aps12\Desktop\Test\lyn\myFirstIO.js:3:19)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
但输入时,
PS C:\Users\aps12\Desktop\Test\lyn> learnyounode verify myFirstIO.js
令人惊讶的是,解决方案已经过去了。
# PASS Your solution to MY FIRST I/O! passed!
我想知道为什么解决方案即使在没有运行时也会通过。 另外,为什么解决方案没有运行?我在那里犯了什么错误? PS:我已经清除了 learnyounode 的前两个模块而没有任何失败。
答案 0 :(得分:1)
如果使用node myFirstIO.js
运行此程序,则会抛出错误,因为它需要将文件作为第二个参数
/*
on this line, file being read using readFileSync and saving it to a
contents variable
*/
var contents = fs.readFileSync(process.argv[2]);
如果您注意到错误TypeError: path must be a string or Buffer
,则需要将文件路径字符串或文件流作为第二个参数。
当您使用learnyounode运行此程序时,他们隐式使用文件运行它,您也可以通过像node myFirstIO.js textfile.txt
那样运行它来测试它
注意,文件路径必须有效。
如果像node myFirstIO.js "Hello World"
那样运行此程序,它将无法正常工作,因为它期望文件路径或流不是字符串。希望这可以帮助您理解这个问题。
答案 1 :(得分:0)
process.argv 返回命令行中给出的所有参数。
执行> node myFirstIO.js
时,您将这些参数传递给process.argv:
['node', 'myFirstIO.js']
...它引发了一个错误,因为你要求第三个参数( process.argv [2] ),你没有在命令行中传递。
了解 process.argv here。
现在,对于learnyounode,我假设您在使用时传递了第三个参数:
> learnyounode verify myFirstIO.js
使用JS文件作为第三个参数;或 learnyounode 错误。