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

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

Node.jsで永続化Cookieに対応する

# 発端

REST 使うコンソールアプリを TypeScript で書きたかったので、 Node.js と axios を使ってコードを書いていたのですが、ログイン操作や読み取り操作など毎回プロセスを起動して落とす設計にしたところ、 Permanent Cookie がプロセス終了とともに消滅してしまう状態でした。

## Permanent Cookie?

[mdn](https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies) によると **セッション Cookie** と **持続的 Cookie** の二つがあると紹介しており、前者は有効期間の指定がないのでクライアントを終了すると消えるとあります(ECのカートのような一時的なセッションで使われる感じですかね)。そして後者は設定された有効期間までは存続すると読み取れそうです(ログイン用途で使えそう)。
実際試したところ、ブラウザや [iOS/macOSのAPI](https://developer.apple.com/documentation/foundation/urls

元記事を表示

【mongoose】mongoDBに大量のdataをSeedする【seedgoose】

# seedgooseについて
最近ポケモン関連のアプリを作成していて、ポケモン達の画像のurlをmongodbに保存しています。
なので、手軽に大量のデータをseedできるプラグインないかなーって探してたらこのプラグインを見つけて
簡単に実現できたので、備忘録として書きます。

設定より規約の思想で作られているため、多少注意点などありますのでそれも説明していきます。

git
[seedgoose](https://github.com/zhangkaiyulw/seedgoose)

執筆時点では星は9個しかついてないです。
ですが、かなりお手軽にできるのでおすすめです。

# 導入
“`
npm i seedgoose
“`
package.jsonにnpm scriptを追加します。
“npm run seed“ でseedを流す事ができるようになります。

“` package.json
“scripts”: {
“seed”: “seedgoose seed”
}
“`

# ディレクトリ構成
※必ず、以下のようにmongooseで定義したmo

元記事を表示

【Hyperledger Fabric】Fabricのコンテナ群とSDKアプリを別々のマシンで動かす時の注意点

#はじめに
Fabricのコンテナ群とSDKアプリを別々のマシンで動かす時の注意点を書きます。
今回は[fabric-samples](https://github.com/hyperledger/fabric-samples)の`first-network`をネットワーク設定に用いるものとします。
fabric-node-sdkを使ったSDKアプリはdockerコンテナとして動いています。

状況を表したものが以下です。
マシン2ではCAやordererも動作していますが、図からは除いています。
スクリーンショット 2019-12-21 23.47.47.png

#設定
SDKアプリを使用する際に用いるconnection profileは以下になります。

“`
{
“name”: “first-

元記事を表示

CentOSにプリインストールされたnodejsとnpmをアップデートする

nvmとかだとログインしてるユーザごとにパスが通らないといけなくて手間だったのでプリインストールされてるnodeとnpmをアップデートした

“`sh
docker run -w /root –rm -it –entrypoint /bin/sh centos:centos7
“`

“`sh
# node.jsのv10をインストール
curl -sL https://rpm.nodesource.com/setup_10.x | bash –
yum remove nodejs npm
su
yum install nodejs -y
“`

“`sh
# 確認
bash-4.2# node -v
v10.18.0
bash-4.2# npm -v
6.13.4
bash-4.2#
“`

元記事を表示

Node.jsを使ったローカルHTTPSサーバーを走らせる

# 目的
OAuth2認可を使ってオンラインサービスと連携させることができるコマンドラインツールを作成中です。ユーザー認証後に認可コードをこのツールで受け取りたいと思っているので、`127.0.0.1`で走るHTTPSサーバーをリダイレクト先として用意したい。
その検証として、まずローカルHTTPSサーバーをNode.jsで走らせてみました。言語は実際の使う予定のTypeScriptとなっています。

## 何を使う?
* Node.js
* httpsモジュール
* TypeScript

# 準備
## まずはHTTPで地ならし
私はNode.jsローカル環境ではHTTPサーバーすらを立てた経験がないので、まずはHTTPから試してみる。

“`typescript:HTTPサーバーならばこれでOK。
import http from ‘http’;

const PORT = 9090;
const HOST = ‘127.0.0.1’;

function startHttpServer(portNumber: number, hostName: string): Promis

元記事を表示

[Tips]AWS Lambdaにzipファイルアップロードをコマンド一発で行う

# 前提
– Node.js
– aws-cliインストール済みであること

# 説明
lambda関数をzipアップロードする場合、zipに固めて管理画面ポチポチするよりも、npm(Node.jsの場合)でスクリプト化しておくと良い。

## コード
“`json:package.json

“scripts”: {
“predeploy”: “zip -r Lambda.zip * -x *.zip *.json”,
“deploy”: “aws lambda update-function-code –function-name {{ Lambda関数のARN }} fileb://Lambda.zip”
},

“`

## 実行
“`shell
npm run deploy
“`

# 補足

npm-scriptsの「pre」プレフィックスを付けると、特定のコマンドの前に自動で実行される。
なので、上の例でpredeployを直接実行する必要はない。
「post」プレフィックスも同様で、事後

元記事を表示

【webpack】npm run dev でbuild.jsが読み込めない

#症状
Javascript + Vue.js + Webpack で開発しているプログラムで、`npm run dev`が急に動かなくなった!!大変だー!!

「急に」という場合は大体急ではなく原因があるのですが、今回はいまだに原因が見つかっていません。

以下詳しい症状です。
1. 昨日までは動いていた
2. `npm run dev` 自体にエラーは出ない
3. `npm run build` は成功する
4. `npm run dev` を `Ctrl + C` でkillしてもポートが解放されない(killできていない)
5. localhost:8080などに置いてあるビルド後のファイル(build.jsなど)が読み込めない
6. Activity monitorでnodeのCPU占領率がすごいことになる。

と以上のような症状が出た人向けの記事です。

#環境
– OS: Mac OS Mojave
– webpack: 4
– node: v13.5.0
– vue-cli: 2

お分かりの方もいると思いますが、vue-cliが2系だった頃のプロジェクトで、webpa

元記事を表示

Lambda+node.jsのREST APIをDocker+Rustに置き換えて高速化したい

## はじめに

– AWS Lambdaをnode.js(javascript/typescript)でよく使っている。
– コスト、またはレスポンス改善のためにLambdaをECS+fargateなどDocker環境に移植したい。
– もちろんRustに移植すれば速くなると思ってやっている。

## Lambdaの問題

– リクエスト課金のため、大規模利用では課金がヤバいことになる。
– レスポンスタイムの揺らぎが大きい、コールドスタートが遅い。
– このどっちの問題にも当てはまらないならLambdaはオススメです。

(最近、Provisioned Concurrencyとか追加されたけど、それでもコールドスタートは発生する)

## なぜRust?

– 速いから。速さがそのままインフラコスト改善になるから。
– C++を長くやってきたけど、最近Rustがいい気がしてきたから。
– でも、現状のLambdaではnode.jsのほうが速いらしい。(node.js、Go、Pythonは同じぐらい)
https://medium.com/the-theam-journey/benc

元記事を表示

[AWS]APIGateway上でExpressのpublicルーティングを通したかった

#はじめに
[新卒ゆるゆるアドベントカレンダー21日](https://qiita.com/advent-calendar/2019/yuruyuru-freshman)担当です!
最近AWSを触らせてもらう機会があり、それについて少々。

#背景
「あんまアクセスないサイトだし、ServerlessでWebサービス作れたら低コストな運用が出来るのでは!?」っていう流れで、AWS,Lambdaで動くWebサーバの構築をNode.js&Expressを使って行いました。
Expressのスケルトンコードを用意し、普段のようにpublic配下にクライアントJSやCSSのリソースを入れ込んで、下記のexample.htmlように自身のURLを指定してリソースを読み込んでいました。
ですが、Serverless.ymlで特定のルーティングをLambdaFunctionに紐づけて定義してしまっているため、example.htmlのようなリソースURLをリクエストされても対応するLambdaFunctionが無いと怒られるだけでした。(この問題の解明に3日ほど費やしました)

“`html:sa

元記事を表示

Google Cloud Functions と Puppeteer で動的ウェブページを実行してコンテンツを返す API を作る

# はじめに

* ウェブページをスクレイピングして遊んでいたところ JavaScript を使った動的なページが出てきて困ったので、Google Cloud Functions と Puppetter を使ってウェブページのダウンロードと JavaScript の実行をしてコンテンツを返してくれる API を作りました。

# できたもの

* https://github.com/nirasan/cloud-functions-dynamic-page-renderer

# つかいかた

“`sh
# ダウンロード
git clone https://github.com/nirasan/cloud-functions-dynamic-page-renderer.git

# 初期化
cd cloud-functions-dynamic-page-renderer
npm install

# ローカルで実行
npm start &
curl -G ‘http://localhost:8080’ –data-urlencode ‘url=http://example.com/

元記事を表示

終わらないLambda実行

この記事は[AWS LambdaとServerless #1 Advent Calendar 2019
](https://qiita.com/advent-calendar/2019/lambda)の21日目の記事です。

## はじめに

API Gatewayと組み合わせてのAPIサービング、SQSトリガーからのジョブ、DynamoDBの更新をフックにした処理など、いろいろな活躍をしてくれるLambdaですが、API Gatewayからのレスポンスが返ってこないな、テストが終わらない?、という状況になったことはありませんか?

今回は私が開発中に出会った、いろんな意味でLambdaやLambdaを使った処理が終了していない、終了していないように見えるパターンについて紹介します。

1. Postgresへの接続
2. Postgresへ接続したFunctionのテスト
3. DynamoDBトリガーのLambdaでの例外によるリトライ

Serverless FrameworkでNode.js + TypeScriptで検証しています。

## 1. Postgressへの接続

元記事を表示

babel

# babel 困った時 Node.js environment
一番役にたったのは一番上のやつ

* **https://babeljs.io/docs/en/babel-node**

* https://jestjs.io/docs/en/getting-started#using-babel

* https://github.com/babel/example-node-server

* https://github.com/FormidableLabs/spectacle/issues/522

# 結論
“`
npm install –save-dev @babel/core @babel/node
“`
最初ずっと **yarn** でinstall してたんですけど, **npm** でしたら一発でした!!

# エラー内容
**Error: Requires Babel “^7.0.0-0”, but was loaded with “6.26.3”.**

“`
Error: Requires Babel “^7.0.0-0”, but was loa

元記事を表示

node.jsで、gcsにあるサイズの大きいjsonlファイルを、mongodbに登録する(メモリふっとばさずに)

# node.jsでgcsからファイルを読み込む

gcsからファイルを読み込む方法を探すと、よくdownload()を使用する例が紹介されています。

“`javascript
const storage = new Storage();
const bucket = storage.bucket(‘test-20180903’);
const file = bucket.file(‘sample’);
file.download().then(function(data) {
res.status(200).json({‘result’: data.toString(‘utf-8’)});
});
“`

download()だと、サイズの大きいファイルを読み込むと**メモリ不足**に
cloud functionsだと2Gまでしかメモリ拡張できないので、gcs側にファイル配置する際に、ファイルサイズを小さく分割しながら.·゜゜·(/。\)·゜゜·.

# @google-cloud/storageのソースを見ている

download()以外に、createReadStr

元記事を表示

Node.jsとnpmのインストール方法 駆け出しWebデザイナーの学習録

# はじめに

2回目の投稿になります。
Webデザイナーとして未経験で入社して3ヶ月が経過しました。
どうすれば主要クライアントのプロジェクトにアサインしてもらえるかと先輩エンジニアの方に質問したところ、サーバーサイド周りのNode.jsやnpmの知識がないとアサインできないとのことでした。
そこで今回は学習した内容を簡単にまとめようと思います。

※この記事は環境構築の最初の段階のみになるので、gulpインストールしたり、gulpfile.jsでタスクを記述していく部分に関しては改めて投稿しようと思います。

# Node.jsとは
本来ブラウザ側で使用する言語であるJavaScriptがNode.jsの登場によってJavaScriptでサーバーサイドの処理・制御をプログラムすることができるようになった。
Node.jsはWebサイトやWebアプリケーション、スマホアプリ開発で使用されている。
またJavaScriptだけでサーバー環境を構築したり、膨大なデータを処理・制御することができるようになった。

## Node.jsのメリット
– 非同期通信による高速な動作
– 大量をデ

元記事を表示

webpack NODE_ENV でハマった話

## 背景

`NODE_ENV`の値で分岐を行いたいと考えていました。
しかし、何を設定しても起動すると`production`となる…

## 調査

調査用に、下記のようなコードを追加

“`js
console.log(`current env => ${process.env.NODE_ENV}`)
“`

webpackしてみると出てきたコードは

“`js
console.log(“current env => production”)
“`

まさかの変換されてしまってました。
どうやら`webpack.config.js`で指定した`mode`の値が代入されてしまうようです。

## 解決策

`optimization.nodeEnv`に`false`を設定する。

“`webpack.config.js
module.exports = {
mode: ‘production’,
// ここを追加
optimization: {
nodeEnv: false
},
// 省略
}
“`

元記事を表示

Discord.js でボットを作る ~発言させるまで~

!この記事は前に書いた記事の続きです。まだ読んでない人は下のリンクから飛んでください!

|前の記事|
|:-:|
|[████](https://qiita.com/yuto0214w/items/432c9f702b3d1067a29c)|

# このページでやること

1. 状況に応じてアカウントを作成
2. ボットの作成からトークンの取得まで
3. コードを書く
4. サーバーに上げる

## 前置き
文字だと分かりにくいところもありそうなので、[動画](#動画)を配置いたしました。
よかったら見てみてください。

# ボットの作成
Discord アカウントを持っていない ー> アカウントを作る
サーバーを作っていない、または入っていない -> サーバーを作る
ボットを作っていない -> ボットを作る
準備が整っている -> コードを書く

|Go to…|アカウントを作る|サーバーを作る|ボットを作る|コードを書く|
|:-:|:-:|:-:|:-:|:-:|
|Select|[████████](#アカウントを作る)|[███████](#サーバーを作る)|[████

元記事を表示

レガシーサービスにおけるパフォーマンス改善 – 使われていないCSSを削除してくれるCLIを作った話

リクルートテクノロジーズ でフロントエンドエンジニアをしている[@SW20_Toshi](https://twitter.com/SW20_Toshi)です。
本記事は[Recruit Engineers Advent Calendar 2019 – Adventar](https://adventar.org/calendars/4502) 20日目の記事です。

皆様はウェブのパフォーマンスを気にしていますか?
おそらく大抵の方はSQLのチューニングやロジックの改良などをした経験があるのではないでしょうか?
今回は、レガシーサービスにおけるパフォーマンス改善として、Puppeteerを使って不要なCSSを削除する取り組みを行いました。
ツールは[OSSとして公開](https://github.com/toshi1127/css-optimization)しているので使ってみてください!

サイボウズ株式会社の[こちらの記事](https://blog.cybozu.io/entry/2019/08/20/170000)には大変お世話になりました!
ありがとうございました!

##

元記事を表示

Auth0ラボ – その1 : Web Sign-In

# はじめに
この記事はAuth0のハンズオンラボで[Auth0 Identity Labs](https://auth0.com/docs/identity-labs)を元に作成しています。Node.js + Express.jsで作成されたSample ApplicationでExpressミドルウェアを利用して認証をリダイレクト、認可サーバとしてAuth0を使います。Auth0の無料アカウントの取得とテナントの作成が完了していることが前提となっています。Auth0の無料アカウント取得がまだの方は[こちら](https://qiita.com/hisashiyamaguchi/items/2d0bcae052077f6ae4a4#auth0%E7%84%A1%E6%96%99%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E5%8F%96%E5%BE%97%E3%83%86%E3%83%8A%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)の記事を参照の上ご準備をお願いします。

元記事を表示

Puppeteerを使って簡単にWebスクレイピングする

世の中には様々なWebスクレイピングツールがありますが、その中でも今回はPuppeteerという、Googleが管理しているOSSを使用しました。
https://github.com/puppeteer/puppeteer

# Puppeteer
**Puppteer(パペッティア)**は、Google Chromeの機能を引き継いで開発されているChromiumと呼ばれるブラウザを自動操作することができるNode.jsのAPIです。
Puppeteerではブラウザを表示することなくバッググラウンドで操作することができる”ヘッドレスモード”を使うことができるため、高速かつメモリを節約した自動操作をすることができます。
(もちろんオプションでブラウザを表示することもできるため、デバッグも簡単です。)

さらに、手動でできるようなユーザの操作(例えば文字の入力やクリックなどのマウス操作や、キーボードを用いた他の操作など)のほとんどを行うことができるため、SPAやSSRなどのWebページでも、簡単に操作することができます。

# この記事で紹介すること
– Puppeteerを用いた簡

元記事を表示

obnizのBLEでペリフェラルを探す

# obnizのBLEでペリフェラルを探す

BLEとはBluetooth Low Engeryの略で、Bluetoothの一種です。
こんな特徴を持っています

– 省電力
– ペアリングなしの接続モードがある
– GATTというプロファイルが基本で、データベースのように相手を扱う
– 1つの親に対して複数の子を接続できる
– スマートフォンなどでかなり普及していて、多くのスマートフォンから利用できる。

obnizにもBLEの機能があります。
これを利用することで同じようにBLEを利用する照明とかスマートウォッチにつないで値を取り出したり、逆にスマホから繋がれるなんてことが可能です。

## セントラルとペリフェラル

BLEでは1対多の通信となっていて、親が1存在します。その親をセントラル、子をペリフェラルと呼びます。

## 初期化

BLEを使用するときは最初に初期化をする必要があります。
初期化はこちらのようにやります。

“`javascript
await obniz.ble.initWait();
“`

## スキャン

BLEのペリフェラルはadvert

元記事を表示

OTHERカテゴリの最新記事