Node.js関連のことを調べてみた2020年03月18日

Node.js関連のことを調べてみた2020年03月18日
目次

Firebaseのアプリケーションで複数のプロジェクトを使用する場合、Firebase app named “xxx” already exists.エラーが出る

# はじめに
一つのアプリケーションで複数のFirebaseプロジェクトを利用する際に、最初にServiceAccountを使って初期化するのですが、次に別のファイルとかで使用する際に、同じように初期化しようとすると、すでに同一名で初期化されているとエラーが出ます。
再利用の仕方をドキュメントで見つけられなかったので、備忘録で…

# 参考
– https://firebase.google.com/docs/projects/multiprojects?hl=ja

# 環境
– Node v13.9.0
– npm 6.14.1

# 現象
‘Firebase app named “dest” already exists. This means you called initializeApp() more than once with the same app name as the second argument. Make sure you provide a unique name every time you call initializeApp().’
とエラーが

元記事を表示

Node.jsのworker_threadsに何を渡すべきか

久々にScalaの世界からJSの世界に帰ってきました。

#1. 本日の課題
本来Node.jsは非同期処理をストイックに突き詰めることでマルチスレッドやマルチプロセスのようなオーバーヘッドを伴う方法よりも高効率に並列処理を実現しているわけです。
ただし、それが有効なのは頻繁に「待ち」≒「I/O処理」が発生する場合に限られます。
ひたすらI/OなしでCPUをぶん回す処理、を複数同時にやれって言われたらシングルスレッドなNodeはマルチスレッドに勝てません。

ですがですが、Nodeにだってマルチスレッド/マルチプロセスの仕組みはあります。

さて今回は、

– 数百MB~数GB程度のデータ構造(変数として持っている)に対して
– 秒オーダーの時間をかけておこなう検索処理を
– 複数回おこなう
– 元のデータ構造は更新しない(Read Only)

という要件で、この「複数回おこなう」というところをマルチスレッドかマルチプロセスで並列化して時間を短縮したい、というお題になります。[^heavy]

# 2.候補
## child_process/cluster
どちらもマルチプロセスなア

元記事を表示

Node.js/Expressのボディパーサーの仕様確認(エコーサーバー(echo-server))

# 背景/目的

クライアント側からのリクエストを各種パーサーがどのようなオブジェクトや配列にしてくれるのを確認することを目的にリクエストの情報をまとめてレスポンスにそのまま返却するようなエコーサーバーを作ってみました。
その他、HTTPクライアントのリクエストが想定通りになっているかを確認するのにも使えると思うので記録として残しておきます。

# 仕様

リクエストの以下の情報をレスポンスJSONにまとめて返す。

– ヘッダー情報
– パス
– HTTPメソッド(Verb)
– クエリパラメータ
– リクエストボディ(ある場合のみ)

# 準備

npmとかnode.jsはインストールされている前提。

“`console
mkdir echo-server
cd echo-server
npm init -f
npm install -y express
touch index.js
“`

# ソースコード

↑で作ったindex.js

“`javascript:index.js
‘use strict’;

const express = require(‘expre

元記事を表示

Docker-composeを使ってExpressの環境構築

Expressの環境構築

“`
git clone https://github.com/Old-rever-brave/Express-Docker

cd Express-Docker

docker-compose up –build

npm install

npm start

http://localhost:3000/

“`

元記事を表示

JavascriptのPromiseを解説します

“`javascript
User.query({where: {name:nm}, andWhere: {password: pw}}).fetch()
“`
これの戻り値が Promise オブジェクトが返ります。

“`javascript
(new Promise()).then(成功時の関数).catch(失敗時の関数)
“`
みたいな

元記事を表示

Node.jsでDeprecationWarningを出さずにencodeとdecode

# 環境
“`zsh
$ node –version
v12.16.1
“`

# 経緯
`Buffer` を使って、encodeしたかった時に`DeprecationWarning`が出てしまったため対処
encode自体は問題なくできるが、[nodejsのドキュメント](https://nodejs.org/ja/docs/guides/buffer-constructor-deprecation/)的には対応した方が良さそう

“`test.js
const before = ‘hogehoge’ // これをbase64でencodeしたい
const buffer = new Buffor(before)
const after = buffer.toString(‘base64’)
console.log(after)
“`

“`zsh
$ node test.js
aG9nZWhvZ2U=
(node:631) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security an

元記事を表示

コード共有サイト作成 docker react node.js mongodb

## 成果物
https://code.itsumen.com/

## リポジトリ
https://github.com/yuzuru2/code_site

## 開発環境

– ubuntu 18.04
– docker
– docker-compose

## 使用ライブラリ周り

### フロントエンド
– parcel
– bootstrap
– highlight.js
– react
– nginx(静的ファイルを配信)

### バックエンド
– typescript
– nodejs
– pm2

### データベース
– mongodb

## 成果物を使うケース

– ちょろっと書いたコードを誰かに見せたい時

## UI

### ホーム画面
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604197/366fa15f-fa3e-92e1-59dc-cef061b69a2f.png)

### コード閲覧画面

![無題.png](https://qiita-im

元記事を表示

NFCシールを活用して自動打刻ツールを(個人的に)作ってみた話

# はじめに

今回はNFCシールを使用して会社の自動打刻システムを、完全に自分用で作ります!

# 要件定義

## なぜつくるか?

現在、弊社の勤怠は、エクセルで管理されています。
実際の打刻フローとしては、

1. 出社したら出社時刻をエクセル開いて手動で打刻
2. 保存
3. 退社するときに退社時刻をエクセル開いて手動で打刻
4. 保存

。。。
**毎日エクセルポチポチするの面倒すぎる!!!!!!!!!**

作業自体も面倒なのに、何日か打刻を忘れるとまあ面倒臭いことになります。

せっかくIT企業にいるんだからいろいろスマートにやりたい…
ということで、今回の自動打刻システムの開発を決意しました。

## どう作るか?

今回開発する自動打刻システムでは、NFCシールを活用していきます。

処理の流れとしては、

1. NFCシールにスマホをかざして専用のWEBサイトを表示する
2. WEBサイトから自動打刻システムにリクエストを投げる
3. 打刻する

といった感じにしようかと思います。

NFCシールにスマホかざすのとリクエストを投げるところにWEBサイト表示をは

元記事を表示

2020年から始めるAzure Cosmos DB – JavaScript SDK (SQL API)を見てみる (Part.1)

![th.jpeg](https://www.bing.com/th?id=OIP.yovZnkelJ4W3sSoRk-oQtwHaD4&pid=Api&rs=1)

# この記事について

本記事は、2020年3月6日 (米国時間) にて、Azure Cosmos DB に新しく Free Tier (無償利用枠) が登場したことに伴い、改めて Azure Cosmos DB を色々と触っていく試みの 3 回目です。
今回は、[前回記事][PrevLink1] にて作成した CRUD アプリ内で使用している **Microsoft Azure Cosmos JavaScript SDK** について見ていきたいと思います。

– [Microsoft Azure Cosmos JavaScript SDK][npm]
– [Azure/azure-cosmos-js][GitHub1] \(old\)
– [Azure/azure-sdk-for-js][GitHub2]

[PrevLink1]:https://qiita.com/ymasaoka/items/0b0b72635

元記事を表示

mockyでリクエストの内容をレスポンスに反映しようとしてハマったメモ。

# やりたいこと
node.jsで動くWebAPIモックサーバーの[mocky](https://github.com/2do2go/mocky)を使って、

“`
{ “name”: “John Smith” }
“`
をPOSTリクエストしたら

“`
{
“id”: 1,
“name”: “John Smith”
}
“`
が返却され、

“`
{ “name”: “Taro Yamada” }
“`
をPOSTリクエストしたら

“`
{
“id”: 1,
“name”: “Taro Yamada”
}
“`
が返却されるように、リクエストの内容をレスポンスに反映したかったのだが、つまづいたのでメモを残す。
mockyのインストール方法、基本の使い方はGithubのREADMEを参考にしてください。

# 結論
基本の使い方は公式のREADMEといいつつ、mocky自体かなりメンテされていないみたいなので少し書き方は今風にしてる箇所もあるが基本的に一緒。

“`mock.js
const mocky = require(‘mocky’);

m

元記事を表示

入門の次のステップに進めないVue.js学習履歴(随時更新)

# 概要
ドットインストールの「Vue.js入門」を実施してある程度Vue.jsをわかった気になった。
https://dotinstall.com/lessons/basic_vuejs_v2

しかし、実際にリリースされているVue.jsのソースを見るとさっぱりわからなかった。
このため、疑問点と調査経緯を自分のメモ目的でこの記事に残していく。

# 疑問点

## yarn run xxx
package.jsonのscriptsで定義されたxxxを実行する。

“`
“scripts”: {
“xxx”: “~~~~~~~~”, ←これを実行
“yyy”: “~~~~~~~~”,
    :
    :
},
“`

■yarn runのドキュメントはこちら。
https://classic.yarnpkg.com/ja/docs/cli/run

## app.use(nuxt.render)

expressのミドルウェアとしてNuxt.jsを使う。

“`
const express = require(‘express’)
const ap

元記事を表示

Lambdaプロキシ統合でmultipartのフォームデータをパースする

ファイル添付とかmultipartで送信されてくることがあるので、そのパース方法。
busboyというライブラリを次のように使うことで実現可能。

`event`はlambda関数の入力。

“`
if (event.headers[‘content-type’] && (event.headers[‘content-type’] as string).includes(‘multipart/form-data’)) {
console.log(‘IT IS MULTIPART’);
const input: CreateMeProfileInput = {};
const busboy = new Busboy({
headers: event.headers,
defCharset: ‘utf8’
});
return new Promise((resolve, reject) => {
busboy.on(‘file’,

元記事を表示

Browser/Node.js両対応、シンプルなHTTPクライアント”bent”

Node.jsでHTTPリクエストしたいなーと思って一番メジャーそうな [request – npm](https://www.npmjs.com/package/request) を覗いたら **deprecated** になってるじゃないですか!

代わりに、シンプルなHTTPクライアントで良いの無いかなーと調べてたら、`request`のissuesコメントにあった`bent`というクライアントに辿り着きました。

# bent
– [bent – npm](https://www.npmjs.com/package/bent)

使い方はとても簡単。

`localhost:3000`へ`GET`してレスポンスボディを文字列で受けたい場合…

“`js
const bent = require(“bent”);

const httpGet = bent(“http://localhost:3000”, “GET”, “string”);

const responseBody = httpGet(“/”);
“`

これだけ。

Node.jsでは`http`を、Br

元記事を表示

Nodeインストール時に遭遇したエラーとその解決策

# エラー内容
“`
v12.16.1 is not found Can not fetch: https://nodejs.org/dist/v12.16.1/node-v12.16.1-darwin-x64.tar.gz
“`
nodeの安定版をインストールしようとした際に
上記のようなエラーが出た。

# 解決策
どうやら別の方法で再インストール。

“`
curl -L git.io/nodebrew | perl – setup
“`
“`
export PATH=$HOME/.nodebrew/current/bin:$PATH
“`
出てきたPATHをbash.profileに追加。

“`
open ~/.bash_profile
“`
保存して閉じ、再読み込みを行う。

“`
source ~/.bash_profile
“`

参考にしました:
[Can not fetch: とか 言われて nodebrew で node のインストールが失敗する](http://kimizuka.hatenablog.com/entry/2018/02/01/

元記事を表示

@kintone/rest-api-client をGitHubからインストールする

# はじめに
`@kintone/rest-api-client` の開発中の機能を、GitHubからインストールして早めに使ってみました。
一般的にNPMパッケージをGitHubからインストールするときに比べて、特殊な方法が必要だったのでメモ。

# 注意

* Webpackビルド環境がある前提です
* 開発中のを勝手に使う場合、深刻なバグがある可能性もあるので自己責任で!

# ディレクトリ構造
rest-api-clientは、Gitリポジトリとしては特殊な形をしています。

https://github.com/kintone/js-sdk
この`@kintone/js-sdk`というリポジトリ内に、サブディレクトリとして`rest-api-client`が存在します。
https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client

NPMの世界では `@kintone/rest-api-client` という単独パッケージ扱いですが、Gitの世界では単なるサブディレクトリ。
(なんでこんな変な構

元記事を表示

フロント・バックエンドサービスをコンテナ化してもGitコミット時にLefthookでテストやLint実行

### TL;DR
– フロント・バックエンドサービスをそれぞれコンテナ化、docker-composeで全てのコンテナを管理する
– monorepoで管理した際に1リポジトリとなるので気軽にGit Hookの処理ができない
– Lefthookを導入してpre-commit時にすべてのコンテナに対してLintツールを動作させるようにした

### サンプルコード
https://github.com/MegaBlackLabel/lefthook-docker-node-go-dev-sample

### 1リポジトリで開発環境を管理したい
渋川さんの記事

マイクロサービスほどじゃないけどウェブサービスを分割開発したい人向けDocker設定を集めるスレ
https://qiita.com/shibukawa/items/fd49f98736045789ffc3

を読んでフロントエンドとAPIがごっちゃになっている開発環境ヨクナイ!ってことでサービス単位でコンテナ化してvs codeのリモートコンテナ機能を使って開発環境を再構築をしていたらGitとGItHooksの扱いで躓

元記事を表示

管理者権限のないWindowsでvue開発(サンプル付き)

コロナ禍で、在宅で、与えられたリモート環境には管理者権限がなくて、でも開発はやらないと。。
なんて状態でもvue開発するための環境構築手順です

ついでに vue の動作確認サンプルも載せときます

#手順
1.node環境の構築
2.vue-cli のインストール
3.vue プロジェクトの作成
4.vue 動作確認用サンプル

#1.node環境の構築
公式サイトから ZIP版をダウンロードしてきて、展開
環境変数を設定します
ファイルを展開して置くだけなので管理者権限は不要です

## 1.1. nodeをダウンロード
https://nodejs.org/ja/download/
Windows Binary の ZIPファイルをダウンロードです

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/5fc2fdf0-7515-fca6-722d-4e242cd7ffb8.png)

## 1.2. nodeをインストールするフォルダの準備
ユーザ(自分)のフォルダにインス

元記事を表示

anyenv 経由の nodenv 経由で Node.js をインストールする

## 背景

Node.jsをインストールする方法がたくさんあって迷う問題。

– [公式のインストーラ](https://nodejs.org/ja) を使う場合
– [homebrew](https://brew.sh/index_ja) 経由でインストールする場合
– [nvm](https://github.com/nvm-sh/nvm) 経由でインストールする場合
– [nodebrew](https://github.com/hokaccha/nodebrew) 経由でインストールする場合
– [ndenv](https://github.com/riywo/ndenv) 経由でインストールする場合
– [nodenv](https://github.com/nodenv/nodenv) 経由でインストールする場合
– [anyenv](https://github.com/anyenv/anyenv) 経由でインストールする場合 (当記事)

いや多すぎんだろ!!?

### 公式のインストーラ & homebrew 経由でインストールした時の問題

– 複数のNodeバ

元記事を表示

Cloud9のNode.jsのバージョンを上げる

# はじめに

Cloud9で使用しているデフォルトのOSであるAmazon Linuxでは、Node.jsのバージョンがv10.19.0のため、2020/03/16時点で最新のv12.16.1にバージョンアップする。

# 前提条件

* AWSにサインアップしていること
* Cloud9のプロジェクトを作成していること
* 本手順ではAmazon Linuxを使用している

“`bash
cat /etc/system-release
Amazon Linux AMI release 2018.03
“`

# 手順

以下のコマンドを実行します。

“`bash
nvm install v12.16.1
nvm alias default v12.16.1
npm update -g npm
npm i -g npm
“`

元記事を表示

Node.js、VSCode、WSLときどきPowerShell

WindowsでNode.js(Angular)を使ったフロントエンドの開発環境を整えるにあたってハマったところを残しておきます

# 開発環境

– OS: Windows 10 Home
– エディター: VSCode
– コンソール: WSL1(Ubuntu)

# VSCodeのGUIで使用するGitを変更する

同じレポジトリをWSLとVSCode両方から弄っている人は今すぐにVSCodeの設定を変更してください

でないとそのうち**どちらからも書き込みができなくなるデッドロックが発生します**

発生するタイミングは把握できませんでしたが、
VSCodeのGUIでファイルの変更を取り消す(discard changes)ときに発生する気がします

![Node.js、VSCode、WSLときどきPowerShell_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174833/0b716216-d48f-c7f4-8886-891b86d93414.png)

この症状が起きるたびにレポ

元記事を表示

OTHERカテゴリの最新記事