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

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

WSLのUbuntu環境でPC内音楽データをWeb操作する(おまけでyoutube音楽とGooglehomeで伝言)

#はじめに
●PC内音楽データをWEBで操作し、PCスピーカで再生できるようにする。
(Googlehomeで声で操作するのWeb操作版です。声でキーワードがうまく入力できない場合に使用してます)
【操作例】WEBから「竹内まりや」と入力する
![コメント 2019-11-27 230824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222582/f9e43aa4-82c0-22d0-eb1f-747e099fa1af.png)
●おまけ
youtube音楽:下記の記事と同じです。
 WSLのUbuntu環境でyoutube音楽をWeb操作する(おまけでradikoとサイマルラジオ)
伝言:Googlehomeで伝言を再生します。google-home-notifierを使用。

#環境
●Windows10 HOMEのPCにWSLのubuntuをインストールする。
●ubuntuでapache2,npm,node.js,youtube-dl,mplayerをインストールする
●WSLのubuntu

元記事を表示

Axiosの前処理でAPIレスポンスのスネークケースをキャメルケースに変換する

## はじめに
サーバサイドからのAPIレスポンスが`some_id`のようにスネークケースで定義されていると、JS側で毎回キャメルケースに変換することになりますよね。

“`ruby
{
some_id: 1,
some_name: “name”,
}
“`

今回はそんな変換処理をAxiosの共通処理でまとめてみました。

## レスポンスをキャメルケースに変換する

“`javascript
import { camelCase, snakeCase } from ‘change-case’;

const isObject = (target: any): boolean => Object.prototype.toString.call(target).slice(8, -1)
.toLowerCase() === ‘object’;

const convertSnakeToCamel = (target: any): void => {
if (Array.isArray(target)) {
target.forEach((t) => c

元記事を表示

Authorizationヘッダーを使ったPOSTリクエストのTypeScript / Node.jsサンプル各種

# POSTの例を
Node.js上動くアプリから、POSTリクエストを投げるコードを書くことが最近多いので、パターンをいくつか書き残そうと思いました。モジュールによって変わる使用感やコードの量、デバッグ方法などを比較したかったため、複数の方法を残します。
なお、ここではコードサンプルを残すのみで、特に比較や分析は述べてません。

### ここに記録しているコード
下の3つです。すべてTypeScriptに対応しているモジュールです。

* Node.js標準のhttp/httpsモジュールを使った例。
* requestモジュールを使った例.
* [got](https://github.com/sindresorhus/got)モジュールを使った例

## Nodeの標準に含まれているhttp, httpsモジュールを使った例
“`typescript:Node標準のhttp/httpsモジュール
import jsonDataImported from ‘./data.json’;

const ACCESS_TOKEN = `<<アクセストークンと置き換えます>>`;
con

元記事を表示

Technology Radar 2019のピックアップ

[Technology Radar](https://www.thoughtworks.com/radar)から気になったものをピックアップし、軽く説明を添えてみました。
社内で共有したところ、反響が良かったのでQiitaにも投稿します。

(自分と似た技術スタックの方に刺さるのではないかと考えています)

# ピックアップの観点
**「自社の技術スタックとマッチしてるか」**、**「自分の技術スタックとマッチしているか」**の観点からピックアップしています。

筆者は現在web系の企業のSREチームに所属しており、業務や趣味で触れる技術/言語としては下記のとおりです。

– Ruby on Rails
– Node.js / Vue.js / Nuxt.js
– AWS + Terraform
– Go/python/Firebase/GCP

一方で下記技術は興味が無い/専門じゃない等の理由でスルーしていますのでご注意ください。

– モバイルアプリ系
– ML系
– JVM系

# Technology Radarとは
要は**今年のイケてる技術の紹介**です。
4段階で導入のお

元記事を表示

CircleCIのnode imageでnpm installに失敗する

CircleCI2系で、公式ドキュメントを参照してセットアップしたらnpm installがコケた。
circleci/node:6.17.1のイメージを使用してる環境。

https://circleci.com/docs/ja/2.0/language-javascript/

“`console
Error: Cannot find module ‘strip-ansi’
“`

こういうエラーでnpm installが停止する。
package-lockの中を見るとstrip-ansiは入ってるし……と思ってたがプロジェクトのパッケージが問題ではなくて、原因としては、公式ドキュメントにある `sudo` がだめ。

“`yml:.circleci/config.yml
– run:
name: update-npm
command: ‘sudo npm install -g npm@latest’
“`

npmがsudoでインストールされるとそのあとのnpmコマンドが通らなくなる(別にinstallに限らずnpmコマンド全部落ちる)。
sudoを外すと

元記事を表示

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