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

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

Node.jsでパスワードを暗号化 | mongoose , Express, MongoDB

`mongoose-bcrypt` をいれる

“`Js
npm install mongoose-bcrypt –save
“`

`mongoose.Promise` を読み込んだ

“`js
mongoose.Promise = global.Promise;
mongoose.connect(config.database);
“`

`.plugin(require(‘mongoose-bcrypt’),{ fields: [‘password’] })` するだけでいい。

“`js
// get mongoose.Schema
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;

// make user model and export
module.exports = mongoose.model(‘User’,
new Schema({
firstName: String,
lastName: String,
password: String

元記事を表示

GitHub Actions上でPuppeteerを動かす

GitHub ActionsでPuppeteerを動かしたいなと思い試してみたメモです。

**結果、特にそこまで気にせずに起動してくれました。**

## 準備

割と普通ですね。

“`
yarn add puppeteer
“`

## プログラム

[GitHubのPuppeteer Headful](https://github.com/marketplace/actions/puppeteer-headful)のページを見ると`process.env.PUPPETEER_EXEC_PATH`でバイナリを指定しろみたいな記載があるけど、特に指定せずに普通インストールして使えました。

“`app.js
const puppeteer = require(‘puppeteer’);

(async () => {
const URL = `https://twitter.com/n0bisuke`;

const browser = await puppeteer.launch({});
const page = await browser.ne

元記事を表示

Vercel上でPuppeteerを動かす

試してみたら動かせました。調べてもそれっぽいの無さそうだったのでメモです。

## 参考にしてるコードとお断り

ググったらこちらのプルリクが当たったので、こちらをもとに書いてますが、現状の公式なやり方かはわかりません。

> https://github.com/vercel/now-examples/pull/207/files

その他参考: [VercelでLINE BOTを動かす 2020年5月版](https://qiita.com/n0bisuke/items/a5f49193fa68f28a7f25)

## 実装

### chrome-aws-lambda + puppeteer-coreを利用

vercelはAWS Lambda上で動いてる模様なので、動作するChromium Binaryも[chrome-aws-lambda](https://github.com/alixaxel/chrome-aws-lambda)を使うと良いっぽいです。

また、バイナリはchrome-aws-lambdaを利用するということで、バイナリが梱包されてない[puppete

元記事を表示

ESLint簡単導入 × VSCode

## node.js をインストールする

### ざっくりコマンド

“`bash
$ brew install nodebrew # HomebrewでNodeBrewをインストール

$ nodebrew setup # Nodebrewのセットアップ

$ nodebrew install-binary latest # 最新版のnode.jsをインストール

$ nodebrew ls # インストールしたnode.jsのバージョンを確認

$ nodebrew use v12.4.0 # ls で確認したバージョンを指定

$ echo ‘export PATH=/usr/local/var/nodebrew/current/bin:$PATH’ >> ~/.bash_profile # パスを通す(bashの例)
“`

参考:[MacにNode.jsをインストール](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)
参考:[【2018年版】macのhomebrewでnodebrew入れてからnode.

元記事を表示

Expressを使ってみた ~ Expressに「ようこそ」と言われるまで ~

# そもそも Express とは
Node.jsのWebアプリケーションフレームワーク

# express-generator
アプリケーションジェネレータツール。これを使うと、アプリケーションの骨組みを素早く作成できる

## インストールしてみる
“`vim
$ npm install -g express-generator
“`

## 実際にアプリを作るためには
– まずはヘルプ機能を確認

“`vim
$ express -h
“`
– さっそくExpressアプリを作成
– アプリ名:myapp
– viewエンジン:pug

“`vim
$ express –view=pug myapp
“`

– 依存関係をインストール

“`vim
$ cd myapp
$ npm install
“`
– アプリの実行

“`vim
$ DEBUG=myapp:* npm PORT=XXXX start
“`

– ブラウザで http://localhost:XXXX/ をロードしてアプリにアクセス

…すると!
Expressがすでにいい感じ

元記事を表示

MANスタックでFIDO2(WebAuthn)に入門してみた

# 始めに

※この記事は、 WebAuthn を使用したユーザ登録フローに関する学習メモです。

作成したソースコード一式は[こちら](https://gitlab.com/s.kawamura/webauthn-nestjs-sample)に格納しておきます。

# FIDO2 について

## TL; DR

– FIDOという非営利団体が推進する認証技術、規格のこと

– 生体認証などで用いられるような専用の機器が不要

– FIDO2 = WebAuthn + CTAP

## W3C WebAuthn

FIDO認証のサポートを可能にするためにブラウザおよびプラットフォームに組み込まれている標準Web APIのこと。登録と認証の機能を持つ。

– `navigator.credentials.create()`:publicKeyオプションと併用すると、新しいアカウントの登録または、既存アカウントへの新しい非対称鍵ペア(公開鍵と秘密鍵)の関連付けを行うための新しい認証情報を作成します。

– `navigator.credentials.get()`:publi

元記事を表示

Node.js インストールからREPL、ファイル実行まで(mac)

#インストール
[nodejs](https://nodejs.org/ja/)
nodejsのサイトでDLしちゃいましょう。
ターミナルでやる方法もありますが、別でググって下さい。

“`
% node -v
v13.8.0
“`

インストールできたらターミナルで確認。npmも一緒にインストールされます。
npmはpythonでいうpipです。

“`
npm -v
6.14.5
“`


#Nodejs REPL

“`
$ node
>
> 3 + 2
6
>
“`

nodeシェルをうまく使うと開発にも役立ちます。
##便利なREPLコマンド
“`
.break セッション内でブロックから抜け出す
.clear セッション内でブロックから抜け出す
.editor 複数行のコードを書ける
.exit セッション終了
.help ヒントの表示
.load ローカルなファイルにアクセスする
.save セッションのコードをファイルに保存する
“`


#Node.jsでファイルを実行する

nodeの後にファイル名を指定することでJavascrip

元記事を表示

【初心者】Puppeteerでよく使うコードベスト3

# はじめに
毎月末になると、ルーティンで作業工数の入力をしています。
JavaScriptで半自動で入力していて、5分ほどで入力出来ています。
が、憂鬱すぎるので全自動化することにしました。
ググって最初に目に付いたPuppeteerを利用します。
実際に利用してみてベースとなるコード、更によく使うコードがわかったのでQiitaに残します。

# コード
### 基本のコード
“`javascript:kihon.js
const puppeteer = require(‘puppeteer’);
// ID・アカウント認証する時はここでID・アカウント情報を読み込む↓
// 後述
// ID・アカウント認証する時はここでID・アカウント情報を読み込む↑

(async () => {
const browser = await puppeteer.launch({
headless: false, // ブラウザの動きを表示
slowMo: 50 // puppeteerの操作を遅らせる
})
const page =

元記事を表示

Node.jsとMongoDBのAPIをHerokuにデプロイするまで

## はじめに。

私は今、Reactと、Nodeでwebアプリを作っています。EC2に環境立ち上げるのはクソだるい… ってことで今までRailsでしか使ってなかったHerokuを使うことに。

Reactは超簡単にデプロイできて奇跡だと思った。Nodeも考える時間含めて2時間くらいでデプロイできた。奇跡!!!

セールスフォースの株買って大切に大切に保持しておきたい。

## Node.jsとMongoDBのAPIをHerokuにデプロイ成功した絵

単純にルートで文字返してるだけ。

スクリーンショット 2020-05-29 23.29.37.png

## 一番最初はProcfileを作る

僕はローカルで、

“`
% node app/app.js
“`

でアプロを起動させていたので、

元記事を表示

VSCodeのSSH接続機能で、RaspberryPi内のNode.jsコードをデバッグ

#はじめに
本記事は、[Pythonでのデバッグ実行](https://qiita.com/c60evaporator/items/26ab9cfb9cd36facc8fd)と同内容を、Node.jsで実行した記事です。

**Node.jsでもブレークポイント付きの快適デバッグが実現できました!**

#必要なもの
・RaspberryPi (本例ではRaspberryPi3 ModelB)
※あらかじめNode.jsをインストールしてください(最新のRaspbian10ではプリインストール)
・上記と同じネットワークにつながったPC (本例ではWindows10)
・Visual Studio Code 1.39.2以降(上記PCにインストール、本例では1.44.2使用)

#手順
下記記事を参考にさせて頂きました
https://qiita.com/GRGSIBERIA/items/b8cd4a2b3635d1bb0391

※手順④まではPythonのときと同内容です
##①SSH接続の設定と、configファイルの保存
[本記事「公開鍵認証の場合」](https://qiit

元記事を表示

JupyterLabでnode.jsのカーネルが立たない

同じ状況に立つ人が果たして居るのか分からないので、雑にメモ

環境:
win10
anaconda 4.8.3

#起こった問題

node.jsのカーネルが立たない

“`
>jupyter lab
[I 19:33:43.066 LabApp] JupyterLab extension loaded from C:\ProgramData\Anaconda3\lib\site-packages\jupyterlab
[I 19:33:43.066 LabApp] JupyterLab application directory is C:\ProgramData\Anaconda3\share\jupyter\lab
[I 19:33:43.486 LabApp] Serving notebooks from local directory: C:\Users\fuga
[I 19:33:43.487 LabApp] The Jupyter Notebook is running at:
[I 19:33:43.487 LabApp] http://localhost:8888/

元記事を表示

SlackBOT Node.js axios await asyncを使ったPOSTリクエスト

# はじめに
最近のJavaScriptでGET,POSTリクエストするには“axios“を使うのがイケてるらしいが、非同期の処理になるためコールバック地獄が起こる。それを解決するために`async` `await`を使ったPOSTリクエストのサンプルコード(個人的なメモ)

SlackBOTに指定のチャンネルにテキストを投稿させるためのコードです。
“カスタムインテグレーションではなく、「App」の方です“
基本的なPOSTリクエストなので応用は効くと思います

#コード
“`javascript:node.js
const axios = require(‘axios’);//npm install axios してね

//Slackにメッセージを送る
//引数1(文字列) : チャンネル名 (例: #勤怠履歴)
//引数2(文字列) : 送りたいメッセージ
const postSlack = async (ch,msg) =>{
console.log(‘postSlack…’)
const req_url = ‘https://slack.com/api/c

元記事を表示

LambdaからSlackにメッセージを送る際のソースコードと複数回メッセージを送る際の注意点

AWSのLambda関数から、SlackのIncoming Webhooksでメッセージを送信する機会があり、少々躓いた箇所があったので備忘録として残しておきます。
Lambda関数やIncoming Webhooksは準備できている想定として、これらの作成手順は省略します。

# 環境
– macOS
– AWS Cloud9
– Node.js 12

#実行コード
Lambda関数を1度実行する度に、Slackメッセージを1件だけ送るような場合は、以下のコードで動くと思います。
1度のLambdaで複数回メッセージを送る場合は、注意点があるので後ほど説明します。

“`javascript
const env = process.env
const request = require(‘request’);

exports.handler = function(event, context) {

// リクエスト設定
const options = {
url: env.WEB_HOOK_URL,

元記事を表示

node-addon-apiについて

# Node-addon-api について

node.jsから、CやC++のAPIを直接実行するためには、
[N-API](https://nodejs.org/api/n-api.html) を使用することになるが、非常に複雑で、コーディングが面倒になるので、
C++でN-APIをラップした[node-addon-api](https://github.com/nodejs/node-addon-api)を使用したほうが良い。

ただ、Javascriptの知識と、C++の知識(メモリ管理等)が必要となりますが、
基本的に細かい制御はクラスライブラリがやってくれるので、
実装に集中できます。

## ビルド方法

### package.jsonの準備

まずは、package.json を準備する。
bindingsとnode-addon-apiをインストールします。

“`shell
npm init # 初期設定
npm install bindings node-addon-api
“`

### binding.gypファイル

binding.gypファイルを作成し

元記事を表示

【JavaScript】forループ内でawaitする方法

#経緯
forループ内で同期処理を行いたかったので調べてみたら **for await…of** というものがあることを知りました。

#結論
このように `async` のなかに `for await…of` を書くことで forループ内で `await` を宣言できます。

“`index.js
// 対象の反復オブジェクト
const targetArr = [1, 2, 3];

// 実行する関数
const sampleFunc = (value) => {
// asyncの効果は各functionブロックで切れるので逐一指定が必要
return new Promise(resolve => {
// 2秒待ってから計算結果をresolveする
setTimeout(() => {
console.log(‘Calculating…’);
resolve(value * 2);
}, 2000);
})
}

// for await…of文

元記事を表示

Swagger-nodeのSwagger定義ファイルを自動的にマージさせる

Swagger-nodeを使って、よくRESTfulサーバを立ち上げるのですが、エンドポイントの追加作業が煩雑になりがちです。

普段はこんな感じで、エンドポイントを追加しているのではないでしょうか。

・既存のapi/swagger/swagger.yamlにエンドポイントを追加
・各エンドポイントに以下を追加
  x-swagger-router-controller: ソースファイル名
・各メソッドに以下を追加
  operationId: オペレーションID
・ソースファイルに、以下のexportsを追記

“`js
module.exports = {
オペレーションID: 関数名
};
“`

上記の作業において、課題がいくつかあります。

・swagger.yaml に、複数のエンドポイントの定義が混在しているためメンテナンスしづらい
・ソースファイルを置いているフォルダ(api/controllers/)に、複数のエンドポイントのソースファイルが混在し散らかる。

そこで、以下をやってくれるユーティリティを作ろうと思います。

<準備>
・api/contoll

元記事を表示

ヒープ領域制限によりビルドが通らない場合

環境
インスタンス:t3a.nano
OS: AmazonLinux2
node.js:v14.3.0

上記環境でnpm run serveを実施してVueアプリの動作確認をした後に
npm run buildでビルドを実行したところ

“`
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed – JavaScript heap out of memory
“`
のエラーが表示されてビルドが通らなかった。

ビルドするためのメモリが足らないと判断できるため
スワップ領域を確保したうえで
https://qiita.com/nakamto/items/5e78e9caceeff6b9e2b4

“`
$ export NODE_OPTIONS=”–max-old-space-size=1024″
$ npm run build
“`
※1024は確保できるメモリ量に応じて変更してください。
max-old-space-sizeの値を指定することでビルドが通りました。

メモリの少ない

元記事を表示

ビデオチャット中に左シフトキーを押している間だけミュート解除し会話できるアプリをつくった

Google MeetやZOOMでビデオチャットをしているとき、マイクに雑音が入らないよう自分の発言中以外は基本的にミュートしているのですが、
ミュート解除を切り忘れたり、別画面を開いているとすぐにミュート解除できなかったりで、面倒だったのでキーボードの特定のキーを押している間だけミュートを解除してくれるアプリ「[**Cough Switch**](https://github.com/narikei/cough-switch)」を作成しました。

トランシーバーやレコーディングスタジオのトークバック機能のようなイメージです。

![output2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/1b083795-2d17-8c44-7aba-b3ffbdbb9788.gif)

## AppleScriptでマイクの音量を操作する
Macの場合、 `システム環境設定 > サウンド > 入力` でマイク設定を操作することができます。
この入力音量を0にするとミュートされます。

元記事を表示

Puppeteerを2系から3系にアップデートしたらError: Failed to launch the browser process!

Puppeteerメモです。

Heroku上で利用していたPuppetterのバージョンを2系->3系にアップデートしたらエラー発生。

## Puppetterのバージョンを2系->3系にするとChromiumのバージョン違いで動かないっぽい

### Heroku上のログ

“`
Error: Failed to launch the browser process!
2020-05-27T21:22:10.217234+00:00 app[web.1]: /app/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome: error while loading shared libraries: libgbm.so.1: cannot open shared object file: No such file or directory
“`

### Heroku上でインストールされているChromiumを更新する

> https://github.com/puppeteer/pup

元記事を表示

Vue.jsでAPIのBasic認証をした

#はじめに
Vue.jsによる開発においてAPIのBasic認証の実装をしました。
エラーについての検索をした際に類似のケースで苦しんでいる方が国内外問わず多くいらっしゃったので、本記事では私が嵌ったエラーと解決策の一例について書いていきます。
当記事の使用言語はVue.jsとNode.jsです。

###課題の切り分け

実装に当たって私が悩んだ点は大きく分けて下記二つとなります。
・CORSの不一致
・非同期処理の中でBasic認証が出来ない(404エラーが返ってくる)

#####◎CORSの不一致
APIのBase URLに対してGETでデータの取得を初めて求めた際に、

“`
Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
Origin ‘http://localhost:8080’ is therefore not allowed

元記事を表示

OTHERカテゴリの最新記事