2017-03-22 7 views
0

私はこれを試していますWindowsのVisual Studioコードpowershell.exeをターミナルとして使用しています。learnyounode:#3私の最初のI/O

多くの失敗の後、私は解決策を見つけるためにインターネットでピークに達しました。

ここで私は、インターネットから持っているソリューションです:

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つのモジュールを何も失敗せずにクリアしました。

答えて

1

あなたがnode myFirstIO.jsを使用してこのプログラムを実行する場合は、ファイルを想定しているため、それが2番目の引数として、エラーがスローされます

/* 
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"のように実行すると、ファイルパスまたはストリングではなく文字列ではないため、機能しません。この問題を理解するのに役立ちます。

0

process.argvは、コマンドラインで指定されたすべての引数を返します。

あなたが> node myFirstIO.jsを行うと、あなたはprocess.argvにこれらの引数を渡している:

['node', 'myFirstIO.js']

...あなたは三番目の引数(process.argv [を求めていたcuzのそれはエラーを投げました2])、あなたがコマンドラインで渡さなかったものです。

process.argvhereを参照してください。

さて、learnyounodeため、どちらか私はあなたが使用したときは、三番目の引数を渡されたと仮定します。第三引数としてJSファイルを使用して

> learnyounode verify myFirstIO.js

。またはlearnyounodeバグです。

+0

私がこのようなものを使ったとしても: '> node myFirstIO.js" Hello World "' それでも、同じエラーが表示されました。 – aps120797

+0

コードの観点からは、3番目の引数はファイル名でなければなりません。これは、フォルダからの相対パスでも、絶対パスでもかまいません。 * path * + * file.extension *である必要があります。 言って、もしあなたのコードだけでこの行: '' 'はconsole.log(process.argv [2])' '' この '' '>ノードmyFirstIO.js "Hello World" の' ''はうまくいくはずですが、あなたがFSモジュールを使っているので、引数として渡されたファイルのパスが必要です。 –

関連する問題