learnyounode:#3我的第一个I / O

时间:2017-03-22 15:00:54

标签: javascript node.js powershell npm visual-studio-code

我在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 的前两个模块而没有任何失败。

2 个答案:

答案 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 错误