初心者による初心者のためのNode.js｜製作途中だからどんどん書き加えていくよ

#初心者のためのNode.js

初心者がNode.jsについて備忘録かねて、書いていく。
間違っている箇所あれば、教えていただけれると幸いです。

##Hello World

出力系統に関する話。
stdout（標準出力）する方法が２種類あるらしい。

```js
console.log('Hello World');
console.info('Hello World');
```

このような感じで出力ができる。

##変数を定義する

変数は```var 変数名 = 初期値```もしくは```let 変数名 = 初期値```で作成できる。
詳しい違いが分からなかったが、ぱっと見て```let```の方が使い勝手がよさそう。
（場合によりけりらしいです）

```js
var var_hello = 'HELLO';
let let_hello - 'HELLO'; //上書き不可能
const let_hello = 'HELLO'; //上書き可能
```

##コメントアウトする

１行のコメントアウトをする際には

```js
//Hey!
```

複数行をするには

```js
/*
Hey
Hey
Hey
*/
```

を使用する。

##演算子　TypeOf

何かの型を調べたいときは```typeof```を使用する。

```js
console.log('APPLE is a ' + typeof('ORANGE') + ' type.');
```

##標準入力からコマンドライン引数を受け取る場合

Node.jsには癖があるらしい。
例えば```node hoge.js 1 2```と引数をつけて呼び出す
その際のインデックスが以下のようになる。

|番号|中身|
|:---|:---|
|0|node|
|1|hoge.js|
|2|1|
|3|2|

コマンドライン引数を読み取るには```process.argv```を使用する。
よって、引数のみを取り出すならこのようなコードになる。

```js
argv = process.argv;

for (var i = 2; i < argv.length; i++) {
	console.log(argv[i]);
}
```

##For分の作り方

普通の言語と何ら変わらない。

```js
for (var i = n; i < N; i++) {
    <処理>
}
```

nは初期値、Nは最大値と考えて、置き換えよう！

##文字列を整数値に置き換える

進数に関しては、変換したい文字列が何進数で表記されたものかを定義する。

```js
parseInt(<変換したい文字列>, <進数>);
```

##ファイルを読み込む

まず、```readFileSync```を使う方法

```js
const fs = require('fs');
const index = fs.readFileSync(<読み込みたいファイル>, "utf8");
console.log(index);
```

次に、```readFile```を使う方法
```if```の中に以上がなかった時の処理を書く。
```else if```の中に異常があった時の処理を書く。

```js
fs.readFile(argv, (err, data_index) => {
	if (!err) {
		console.log(count)
	} else if (err) {
		console.log(err);
	}
});
```

##SHELLコマンドを使う

Shellコマンドを使うには```exec```を使う
子プロセスを作成して、帰り値を```stdout```に保存する

```js
const exec = require('child_process').exec;
exec(<コマンド>, (err, stdout, stderr) => {
    if (err) {

        console.log(err);
    }
    console.log(stdout);
});
```

##HTTPリクエストを送り、サーバーからファイルを取ってくる

これでHTMLファイルを獲得できます。

```js
let http = require('http');
http.get(<リクエストを送るURL>, (res) => {
    let html_data = ""
    res.on("data", index => {
        html_data = html_data + index
    })
    res.on("end", () => {
        console.log(html_data)
    })
}).on('error', function (err) {
    console.log(err.message);
});
```

受信したイベントの内容が```data```と```end```と```error```だった時で条件分岐させてやります。

##パッケージを使う

コマンド```npm```で、必要なパッケージをインストールできる。
パッケージを使いたいディレクトリに入って、以下コマンドを実行する

```shell
npm install <コマンド>
```

グローバルで使いたい場合には、```-g```オプションをつけると、どこでも使える。

##同期処理

```複数のタスクを実行する際に一つずつ順番にタスクが実行される方式のこと``` それが同期処理。


```js
let int_1 = 0;
let int2 = 0;

async function setInt(a, b) {
	int_1 = a;
	int2 = b;
	return true;
}

function sumInt() {
	console.log(int_1 + int2)
}

async function runProcess() {
	await setInt(1, 2);
	sumInt();
}

runProcess();
```

詳しく、このような流れになっている。

```
runProcess()が呼び出される
　↓
　setInt(1, 2)が呼び出される
　　変数に値が代入され、Trueが返されるまで待つ
　↓
　sumIntが呼び出される
　　値がSTDOUTで出力される
```



#参考にした記事

https://blog.y-yuki.net/entry/2018/11/14/223000

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/typeof

https://www.javadrive.jp/javascript/ope/index16.html

https://garafu.blogspot.com/2017/05/nodejs-command-line-arguments.html

https://techacademy.jp/magazine/15335

https://codezine.jp/article/detail/11353

https://spphire9.wordpress.com/2011/11/16/node-js%E3%81%A7%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%A1%8C%E6%95%B0%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/

https://blog.katsubemakito.net/nodejs/file-read

https://qiita.com/wifeofvillon/items/b307306eed08d8a7b4f4

https://qiita.com/n0bisuke/items/788dc4379fd57e8453a3

https://tkybpp.hatenablog.com/entry/2016/04/25/163246

https://blog.katsubemakito.net/nodejs/request

https://www.twilio.com/blog/5-ways-to-make-http-requests-in-node-js-using-async-await-jp

https://www.rworks.jp/system/system-column/sys-entry/21730/#:~:text=%E5%90%8C%E6%9C%9F%E5%87%A6%E7%90%86%E3%81%A8%E3%81%AF%E3%80%81%E8%A4%87%E6%95%B0,%E3%81%97%E3%82%84%E3%81%99%E3%81%84%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82