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

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

Node.jsでログにUser IDを自動出力

## 背景

ECサイトなどを運用する場合、ログにユーザの識別IDが付与されていると調査時に行動を把握することが容易なため便利です。
そこで今回はNode.js(Express)で実現してみたいとおもいます。

## 実装

### userId保持用の箱を準備
ログを出力する際、userIdを参照できるようにシングルトンなクラスを作成しておきます。

“`requestContext.js
class RequestContext {
init(userId) {
this.userId = userId
}

getUserId() {
return this.userId
}
}

export default new RequestContext()
“`

### Expressサーバ

下記の記述を、他のルーティングの上部に配置します。

“`express/app.js
import requestContext from ‘path/to/requestContext’

app.use((req, res, next) => {

元記事を表示

Node.jsのCloud Tasksクライアントでタスク作成をリトライする

[Node.jsのCloud Tasksクライアント](https://github.com/googleapis/nodejs-tasks)を使っていると、たまにgRPCのエラーでタスクの作成に失敗することがありました。リトライのための設定がややわかりにくかったので、リトライする方法を解説します。

## バージョン

– @google-cloud/tasks: 1.5.1
– google-gax: 1.7.5

## 設定方法

[ドキュメント](https://googleapis.dev/nodejs/tasks/latest/v2.CloudTasksClient.html#createTask)にあるように、 `CloudTasksClient.createTask()` の第2引数に [CallOptions](https://googleapis.github.io/gax-nodejs/interfaces/CallOptions.html) を渡すとリトライなどの設定を行えます。具体的な設定例は次の通りです。

“`js
const client = new

元記事を表示

ant+をraspberry piで使う(node.js)

# ラズパイでant+を使います
参考
https://www.johannesbader.ch/2014/06/track-your-heartrate-on-raspberry-pi-with-ant/

#### 仕様物
– [AZ4U](https://www.amazon.co.jp/AZ4U-USB%E3%83%89%E3%83%B3%E3%82%B0%E3%83%AB-GARMIN%E4%BA%92%E6%8F%9B-ZWIFT-1%E5%B9%B4%E4%BF%9D%E8%A8%BC%E4%BB%98%E3%81%8D%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%E6%AD%A3%E8%A6%8F%E5%93%81/dp/B07FZHFLD6/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=az4u&psc=1&qid=1572531900&s=amazon-devices&sr=8-1)
– [ForeAthlete 235J](htt

元記事を表示

Gulp環境構築にて「AssertionError [ERR_ASSERTION]: Task function must be specified」の原因はgulp v4にバージョンアップした事による仕様変更

始めての投稿です。
1. エラー内容、背景
2. 環境
3. 解決方法
4. 原因
の順に記載して行きます。

## 1. エラー内容、背景
gulpにてSassを自動コンパイルしたかったため、Homebrew、Node.js、gujpをインストール。
gulp自動監視を起動しようと、コマンド実行すると、

“`ruby:qiita.rb
‘AssertionError [ERR_ASSERTION]: Task function must be specified’
“`
と言うエラーが。

## 2. 環境
mac

– npm 6.7.0
– Node.js 12.13.0
– CLI 2.2.0
– gulp 4.0.3

## 3. 解決方法
**Node.js**と**gulp**のバージョンを下げる。

– Node.js 12.13.0
– gulp 4.0.3

  ↓

– **Node.js 11.15.0**
– **gulp 3.9.1**

Node.jsのバージョンの下げ方は、

“`ruby:qiita.rb
$ npm install -g n

元記事を表示

Deno Style Guideを読み解く

## Deno – JavaScriptランタイムのネクストスタンダードか

Deno、いいですよねー。セキュアだし、TypeScript推しだし、標準モジュール志向だし。

## v1.0のリリースについて

未だv0.2ということで本番環境での利用は推奨されていません。
作者のライアン曰く2019年中にv1.0リリースすると公言しているそうですが、コミュニティの中では恐らく来年中頃くらいまではかかるのでは?という予想です。
まぁ正式リリース前のこのタイミングで各種情報をキャッチアップしておけばJS界隈で遅れを取ることはなさそうですね。

## Deno Style Guideとは

その名の通りDenoをコーディングする際の現時点でのベストプラクティスです。
リンクは[コチラ](https://deno.land/std/style_guide.md)。

denoStyleGuide.pngHeadless #GoogleChrome + #node puppeteer + #docker で Webページのスクリーンショットを作成する例

# Dockerfile

– ほとんど公式のtroubleshootingのまま https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
– `npm i puppeteer-core` がないと動かなかった気がするので追加している

docker で利用するには一筋縄でいくわけではないよー的なことが書かれている気がする

>Getting headless Chrome up and running in Docker can be tricky. The bundled Chromium that Puppeteer installs is missing the necessary shared library dependencies.

“`dockerfile
# https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

FROM node:10-slim

# Insta

元記事を表示

n でバージョン管理

curl -L http://git.io/n-install | bash

n

n ls

再ログイン

$ npm cache clean
$ npm cache ls
$ rm -rf ~/.npm

echo “deb http://mirrors.kernel.org/ubuntu/ xenial main” | sudo tee -a /etc/apt/sources.list && sudo apt-get update && sudo apt install -y –allow-unauthenticated libpng12-0

元記事を表示

cradle.js (0.7.1) が動かなかった話

cradle使おうとしたんです。
[node.jsから驚くほど簡単に使えるNoSQLサーバ Couchbase(CouchDB)を試す!](http://wise9.jp/archives/4291)

を参考に、expressのバージョンが上がってるからちょこちょこ修正しつつ、さてDB編集だと言った時にこんなエラーが。

“`
C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle.js:316
if (! o.__lookupGetter__(attr)) {
^

TypeError: o.__lookupGetter__ is not a function
at C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle.js:316:21
at Array.forEach ()
at C:\home\minori\program\js\

元記事を表示

express がいつのまにかバージョンアップしてた

なので、今新しくexpress のシステム作ろうとして WEB に出回っているコードをコピペしても **全然** 動いてくれません。

https://expressjs.com/ja/guide/migrating-4.html

とりあえずこれを参照すればなんとかなると思います。

元記事を表示

Typescript: X is Declared, But Never Usedの解決方法メモ

## X is Declared, But Never Usedというエラーが出ることがある。

以下のような例だ。

“`ts
export const onChange = (val: string, index: number) => {
index + 1
}

// val is Declared, But Never Used
“`

## 回避するには、変数の代わりに空のオブジェクトを使えば良い。

“`ts
export const onChange = ({}, index: number) => {
index + 1
}
“`

エラーが消えるはずだ。

この方法は可読性を高めてくれるので、気に入った。

参考
https://www.triplet.fi/blog/typescript-getting-rid-of-error-x-is-declared-but-never-used/

元記事を表示

Nuxt.jsチートシート

関連:
– [Vue.jsチートシート(基礎編)](https://qiita.com/morrr/items/289b6e7ac82e969a7a58)
– [Vue.jsチートシート(コンポーネントと構成編)](https://qiita.com/morrr/items/2642135a927d6a3e7584)

Vueチートシートに引き続き公式チュートリアルの抜粋です。

参照
————————————————————
– [Nuxt.js日本語公式](https://ja.nuxtjs.org)
– [ガイド](https://ja.nuxtjs.org/guide)

概要
————————————————————
– Nuxt.js = Vue.jsおよびそのプラグインに基づくサーバサイドフレームワーク
– NuxtはVue.js, vue-router, vuex, Vue Server Ren

元記事を表示

2019年 #HTML #PDF 変換の情勢とは? ( phantomjs -> wkhtmlpdf -> headless Chrome + #node + puppeteer )

https://www.paperplane.app/blog/modern-html-to-pdf-conversion-2019/

# 古い手法とは

PhantomJSのかわりにwkhtmltopdfが重宝されてきたけどモダンブラウザの仕組み、 HTML5やjsに対応しきれてないよーって書かれてる気がする。

>The traditional approaches
>Until 2017, there were two common ways to convert HTML to PDF. The first was to use wkhtmltopdf — an open source command line tool specifically designed for the task. A second alternative was PhantomJS, an open source “headless” web browser which can be controlled with JavaScript.

>Although these tools have s

元記事を表示

Node.js(express)を用いたハッシュ化の仕方

## はじめに
 会員登録の際に、ユーザーから送られてきたパスワードをハッシュ化する方法について解説します。
また、ログインの際にユーザーが入力したパスワードとハッシュ化されたパスワードが一致しているのか確認する必要があると思います。それについても解説します。

## 実装
### 事前準備
 まずはNodeにハッシュ化するためのモジュールをインストールします。

“`
npm install –save bcrypt -s
“`
### パスワードをハッシュ化する

“`hash.js
const bcrypt = require(‘bcrypt’);
//モジュールの読み込み
const password = “hoge”;
let hashed_password = bcrypt.hashSync(password, 10);
“`
以上でパスワードのハッシュ化が行えます。

### ハッシュ化された値とパスワードの値の一致の確認

“`hash.js
bcrypt.compareSync(“hoge”, hashed_password) // =>ture
“`

元記事を表示

CentOSにnvmインストールしたnodeが再起動時には扱えなくなる現象の解決

#概要
普段はReact NativeでIOSアプリを開発してます
今回は、CentOS内でnvmでインストールしたnodeコマンド利用ができなくなった現象を解決した流れのメモを共有します

“`
[vagrant@localhost ~]$ node
node: /lib64/libc.so.6: version `GLIBC_2.16′ not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.17′ not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.14′ not found (required by node)
[vagrant@localhost ~]$
“`
上記のようなエラーが吐かれnodeが利用できません

#解決策
nvmでインストールしたnodeをデフォルトでの利用をさせるようにします

“`
[vagrant@localhost ~]$ which node
/usr/bin/node

元記事を表示

What’s “Node.js” ?

よく使い方を忘れるので、必要な時にサッと読み返せるように超完結にまとめておきます。

>関連記事
>[What’s “Git” ?](https://qiita.com/oekaki-hoho-ron/items/afa6786f2f845939a00e)
>[What’s “nvm” ?](https://qiita.com/oekaki-hoho-ron/items/1d00183f96e64d817824)
>[What’s “Node.js” ?](https://qiita.com/oekaki-hoho-ron/items/ded73f301c7e749deb9f)
>[What’s “npm” ?](https://qiita.com/oekaki-hoho-ron/items/b815125dca07751b73e9)
>[What’s “React” ?](https://qiita.com/oekaki-hoho-ron/items/104f5f2c39a6b83e8238)
>[What’s “Next.js” ?](https://qiita.com/oekak

元記事を表示

【Node.js+Express+PostgreSQL】async/await使ってPostgreSQLに接続

# はじめに
本記事では、コールバックではなく、“async/await“を使ってExpressでPostgreSQLに接続する方法をまとめる。
“async/await“部分以外は、以下の記事を参考にしていただければ。

* [【Node.js+Express+PostgreSQL】ExpressにPostgreSQLを導入](https://qiita.com/c6tower/items/c6fc18e14229dbf2f53a)

## 環境
* Windows 10
* Express 4.17.1
* PostgreSQL 11.3
* pg 7.12.1

## サンプルコード
“`js:sever.js
const express = require(“express”);
const app = express();
const pg = require(‘pg’);

const pool = pg.Pool({
host: hoge,
database: hogehoge,
user: huga,
port: 5432,
passwor

元記事を表示

HTML to PDF 変換コマンド・ライブラリの比較 : 結論 headless Chrome の直接利用が最強では? ( #HTML #PDF #node #GoogleChrome )

# 環境

Mac

# Web: 変換元

https://yahoo.com を変換してみる。

![image](https://user-images.githubusercontent.com/13635059/67829773-b45a0d00-fb1b-11e9-865d-fd8489154d08.png)
![image](https://user-images.githubusercontent.com/13635059/67829777-bae88480-fb1b-11e9-925a-e14091f63c30.png)

# Chrome の headless モード

OSのGoogleChromeを直接利用する。

>ヘッドレス Chrome ことはじめ
https://developers.google.com/web/updates/2017/04/headless-chrome

“`
alias chrome=”/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome”

chrom

元記事を表示

Docker & Node.js & Socket.io & NGINXでよくあるエラー

# エラー内容
タイトルの構成でアプリケーションを作っていた時に以下のエラーが出てつまずいた

`socket io failed: Error during WebSocket handshake: Unexpected response code: 400`

# 何故起きたか

WebSocket接続のハンドシェイク時に `HTTP/1.1 101 (Switching Procotols)` というステータスコードと `Hop-by-Hopヘッダ` を使用してWebSocket通信への切り替えを行う仕様に `Nginx v1.3.13` から変更されたらしい。

>Since version 1.3.13, nginx implements special mode of operation that allows setting up a tunnel between a client and proxied server if the proxied server returned a response with the code 101 (Switching Proto

元記事を表示

インスタンスが起動したら自動的にNode.jsアプリが起動するようにする

# Node.jsアプリの自動起動をしたい

## はじめに

AWSでインスタンスを再起動するたびにアプリケーションを再起動するのが非常に面倒だったため、インスタンスが起動したら自動的にアプリケーションが起動するようにしました。

今回はPM2というプロセスマネージャーを利用してアプリの自動起動を行う方法を、作業メモを兼ねて紹介します。

## PM2とは

PM2はデーモンプロセスマネージャーです。

プロセスをデーモン化しておらず、シェルを抜けたらアプリケーションが終了していた、といった経験はみなさんあるのではないでしょうか。

PM2を利用するとプロセスをデーモン化することで、アプリケーションを起動した状態に保つことができます。

そのため、Node.jsアプリケーションの本番運用などに利用されているようです。

公式サイト: [PM2](https://pm2.keymetrics.io/)

## 導入

下記コマンドでインストールできます。

Node.jsやnpmは事前に[nvm](https://github.com/nvm-sh/nvm)などを利用してインストー

元記事を表示

Electronで作業中に使えるアプリを作っていたら残像が残った話

#症状
displayをnoneとした要素の影がついたままになって残像が残ってしまっていた(Macのみの症状)

“`javascript
dom.style.display=”none”;
“`
としましたが、

スクリーンショット 2019-10-30 12.18.09.png
↓dislpay:none;
スクリーンショット 2019-10-30 12.18.16.png
**残像が残っている!**

これは困りましたね(困惑)

調べて

元記事を表示

OTHERカテゴリの最新記事