Node.js関連のことを調べてみた2019年11月27日

Node.js関連のことを調べてみた2019年11月27日

Node.jsのfsモジュールの使い方

#fsモジュールとは
fsモジュールはファイルを扱うためのモジュールで、ファイルから書き出したり、ファイルに書き込んだりするときに役立ちます。
Node.jsがはじめから提供しているモジュールなので、Node.jsのインストールがしてあれば、fsモジュールのインストールの必要はありません。

##ファイルの読み込み

“`JS
const fs = require(‘fs’);

//fs.readFileSync(ファイルのパス, 文字コード, コールバック関数)
fs.readFileSync(./text.txt, utf-8, (err, data) => {
//dataがファイルの中身、errは読み込み時のエラー
if(data) {
console.log(data);
} else {
console.log(err);
}
});
“`

##ファイルへの新規書き込み

“`JS
const fs = require(‘fs’);

//fs.writeFileSync(ファイルのパス, 書き込む文字, 文字コード, コールバック関数

元記事を表示

ファイルをセーブしたら、npmスクリプトを走らせる」というライブラリを1行で作る。

## 「ファイルをセーブしたら、npmスクリプトを走らせる」というライブラリがある日突然欲しくなりました。

[onchange](https://github.com/Qard/onchange)というライブラリが見つかりました。npmライブラリです。

使い方は簡単で、onchangeをグローバルにインストールした後、grobパターンで、監視するファイルとnpmスクリプトを記述するだけです。

“`
npm install -g onchange
onchange ‘app/**/*.js’ ‘test/**/*.js’ — npm test
“`

しかしです…

**globパターンを記述するのが地味に面倒い!**
ルートフォルダ以下で変更があれば、npmスクリプトを走らせるだけでいいのに…

## そこでよりシンプルなライブラリを自作することにしました

作ったのが「save-run」というライブラリ。

名前は、save-runとして、npmに登録してあります。
[githubリポジトリはこちら](https://github.com/t-kabaya/sav

元記事を表示

Node.js で無限ループしつつ、一定周期で処理をしたい

メモ。
Node.js で無限ループしつつ、一定周期で処理をしたいという要件があった。
(具体的には SIGTERM シグナルを受けてから1秒毎に標準出力に文字列を出力したい)
上記について Node.js のサイトにずばり書いてあった。

[“Infinite Loop” Execution ~ setInterval()](https://nodejs.org/de/docs/guides/timers-in-node/#infinite-loop-execution-setinterval)

“`node.js
function intervalFunc() {
console.log(‘Cant stop me now!’);
}

setInterval(intervalFunc, 1500);
“`

この場合、1.5秒毎に `intervalFunc()` が実行される。
必要に応じて時間や処理内容を変えれば良い。

Node.js v10.17.0 で動作確認済み。

元記事を表示

ZEIT NowでNode.jsのバージョン指定をする

## NowへのデプロイでNodeのバージョンに起因するエラーが起きた
“`
Error: @grpc/grpc-js only works on Node ^8.13.0 || >=10.10.0
“`
上記のエラーが起きて困った。

## :bomb: 原因
要するに8.13.0 から 10.10.0 の間のバージョンじゃないと動かないよということだと思う。

## :star: 解決策
じゃあNodeのバージョンをこっちで指定してあげようということになる。

英語の情報しか出てこないが漁っていると、「now.json」で「engine」という項目を指定するみたいな情報が出てくるがこれが罠である。

***ZEIT NowのNode.jsバージョン指定は「now.json」ではなく「package.json」で指定する***

“`package.json
“engines”: {
“node”: “10.x”
}
“`

これでOK。

ただし、バージョンは何でもかんでも指定出来る訳ではなく提供されているものだけ。

元記事を表示

Node.jsでプロファイリングをする方法

##node –prof index.js
–profはプロファイリングと呼ばれる、処理に時間がかかっている様子やどれ位メモリを使っているのかを調べる方法を提供するオプションです。

“`console:console
$ node –prof index.js
“`
とすると、index.jsが入っているディレクトリに、

“`index.jsが入っているディレクトリ
isolate-0x103002a00-v8.log
“`
以上のようなログファイルが生成されます。
しかし、このログファイルは人間が見てもよくわかりません。
そこで、このログファイルを以下のように人間が見やすいファイルにします。

“`console:console
$ node –prof-process isolate-0x103002a00-v8.log
“`
すると、コンソールに以下の表示が出ます。

“`console:console
>
Statistical profiling result from isolate-0x103002a00-v8.log, (382 ticks,

元記事を表示

Node.jsで簡易テストをできるassert.equal()

##assert.equal()
assert.equalは、アサーションというnode.jsが提供する簡易テストのモジュールです。

“`JS
const assert = require(‘assert’);
assert.equal(50, 50); //OK
assert.equal(50, “50”); //OK
assert.equal(50, 70); /*AssertionError: 50 == 70 */

//関数と答えの比較もできます
function addition(n) {
let result = n + 1;
return result;
}
//第三引数に、エラーが出た場合のエラー表示の設定をできる。
assert.equal(addition(1), 3, `1 + 2の答えは3ですが、計算は${additon(1)}でした`)
//AssertionError: 1 + 2の答えは3ですが、計算は${additon(1)}でした`
“`

##assert.deepEqual()
assert.deepEqualは配列オブジェクトの深

元記事を表示

Node.jsのprocess.argv[i]とは

Node.jsのファイルで以下のような記述がありました。

“`JS:index.js
‘use strict’;
const number = process.argv[2] || 0;
let sum = 0;
for (let i = 1; i <= number; i++) { sum = sum + i; } console.log(sum); ``` それに対して、いかのような記述をすると、 ```console:console $ node index.js 3 > 7
“`
となります。
つまり、node index.js 3の3の部分が、process.argv[2]に当てはまるということです。
process.argv[0]だったら、node
process.argv[1]だったら、index.js
を意味します。

元記事を表示

Node.jsでのリクエストIDのログ出力(express, log4js, request-context)

##概要
Node.jsのexpressベースのWebアプリで、リクエストIDをログ出力します。
今回、log4js、request-contextを使用しました。

request-contextで、リクエスト毎にリクエストIDを保持します。
log4jsのtokensに、リクエストIDをセットして、patternでリクエストIDを出力するようにしています。

##参照情報
参考にさせていただいたページは下記です。

* 参照先1: [Node.jsでログにRequestIdを入れる](https://qiita.com/ippei_ukai/items/adea86744777cbef5eba)

* 参照先2: [Node.js で Log に userId を自動で出力する方法](https://qiita.com/waterada/items/3b3cedc86e1a4eb47d91)

##注意点
request-contextは、下記の通り、Node.jsのdeprecatedになっているdomainに依存しています。参照先2でも指摘されており、より詳しく記載されていま

元記事を表示

Nodejs Send Email Using Nodemailer

Email is use to send notification or information to the user.This nodejs tutorial help to send email using nodemailer. You can send mail as a plain text, HTML body and email with attachment.I will demonstrate all flavors of email using node Nodemailer.

Nodejs Send Email Using Nodemailer

元記事を表示

【自分用】脆弱性への対処法②

##主な脆弱性
([脆弱性への対処法①](https://qiita.com/tarotaro1129/items/71fd835314a108834b5a))
・OSコマンド・インジェクション
・SQLインジェクション
・ディレクトリ・トラバーサル
・セッションハイジャック
(脆弱性への対処法②)
・クロスサイト・スクリプティング(XSS)
・クロスサイト・リクエストフォージェリー(CSRF)
・HTTPヘッダインジェクション
・クリックジャギング

##脆弱性の具体例と対策

###クロスサイト・スクリプティング(XSS)
XSSとは、動的にHTMLを生成する機能(JavaScriptなどによってHTMLが生成されている機能)において、悪意を持ったユーザーにHTML、JavaScript、CSSの変更がなされてしまうことです。

例えば、掲示板など自分の書いた情報が反映されるアプリがあるとした場合、

“`HTML