Node.js関連のことを調べてみた2022年02月27日

Node.js関連のことを調べてみた2022年02月27日
目次

Node.jsのMySQLモジュールを使った値のエスケープでハマった話

## はじめに
こんにちは。ブログとQiitaの使い分けがいまいちできない鮎月(あゆつき)です。
Qiitaの投稿は2つ目になりますが、タイトル通りの話です。

一応確認ですが、このモジュールについてのお話です:

https://www.npmjs.com/package/mysql

https://github.com/mysqljs/mysql

## 2つのエスケープ方法
Node.jsのMySQLモジュールには、2つのエスケープ処理の方法があります。

### connection.escape()
例としてこんな感じになります (公式Docより)
“`js
var userId = ‘some user provided value’;
var sql = ‘SELECT * FROM users WHERE id = ‘ + connection.escape(userId);
connection.query(sql, function (error, results, fields) {
if (error) throw error;
// …

元記事を表示

yarn start できなくなった

# yarn start できない
command failed with exit code 127.
が表示されている
## 試したこと
### yarn install
何も変わらず
### rm -rf node_modules 後に npm install
何も変わらず
### yarn add yarn
できた!

# まとめ
結局何が原因なのかは分かりませんでしたが、なんとかなったので、よしとします。
また、このあたりはきっちり学習しないと困る気がするので頑張ります。

元記事を表示

フロントエンドエンジニアの Node / Express 入門 ~ CRUDなAPIを作る ~

# 初めに

フロントエンドエンジニアになって7ヶ月が経ちました。最近サーバーにも興味が出てきたのでフロントと相性の良さそうな Node.js と、そのフレームワークの Express を使ってAPIを作ってみます。あと MongoDBとかいう子が Node/Express のプロジェクトでよく使われるっぽいので一緒に入門してみます。
サーバー初心者なのでその辺はあしからず、、

## 本記事で取り扱うこと

* Node.js / Express を用いたAPI作成しPostmanで動作確認をする
* MVCモデルっぽく作ってみる
* MongoDBとの接続

## 扱わないこと

* DB設計とかの踏み込んだ部分
* Typescript との連携
* Vue / React などのフレームワークとの繋ぎ込み
* EJSなどのテンプレートエンジン

## バージョン

Node
Express
Mongoose

## ディレクトリ構成

“`
node-project
├── controllers
│ └── api.js
├── models

元記事を表示

HomebrewでnpmのCLIツールを管理する brew-npm のご紹介

HomebrewでnpmのCLIツールを管理する [brew-npm](https://github.com/shuuuuun/brew-npm) をご紹介します。

## brew-gem が便利

brew-npm の紹介に入る前に、 [brew-gem](https://github.com/sportngin/brew-gem) というツールはご存知でしょうか。

macで複数プロジェクトのRubyの開発をしていると、 [rbenv](https://github.com/rbenv/rbenv) や [rvm](https://rvm.io/) などを使って、プロジェクトごとにRubyのバージョンを切り替えて作業をしている方が多いと思います。

そんな環境で、グローバルにいろいろなディレクトリで使いたいCLIツールなどを、普通にgemでインストールすると、Rubyのバージョンが切り替わったときに使えなくなってしまいます。

“`sh
# こういうのよくありますよね
$ foreman -v
rbenv: foreman: command not found

The `fo

元記事を表示

Twilioで匿名のLINE通話みたいな機能を実装してみた

# はじめに
アプリ内で匿名通話を行うような機能を実装したので、導入手順(主にバックエンド)をまとめました。

# 背景
お互いの電話番号を知らせずに通話する(匿名通話)という要件があったので、Twilioで050番号を購入して自動転送させるという仕組みをつくりました。

Twilioを使うと、匿名通話のようなプライバシーを守るための機能だけではなく、自動応答(音声)などの仕組みも簡単に導入することができます。
例えば、食べログの電話予約で050番号にかけると、店舗側で受話器をとったときに「食べログからの電話です」という音声が流れるようなのですが、このような機能もTwilioで実装することができます。

また、ユーザAの端末からTwilioの050番号にそのまま架電することもできる(回線交換方式)のですが、以下の問題があったので、パケット交換方式(VoIP)による通話機能を実装することにしました。

– ユーザAに発信料、Twilioアカウントに着信料が発生する
– 0120番号に切り替えても、Twilioアカウントへの着信料が発生する
– ユーザAの発信は通話アプリから行うため(作成

元記事を表示

CPUをOpen Hardware MonitorとNodeJSで監視してSlackで通知する

# 何がしたいか
重いシミュレーションを長い時間かけてリモートPCで回し続けるのはやっぱり不安な点があり,特に知らん間に冷却装置が不調を来したらどうしようという不安に苛まれる,まして多少はCPUをチューニングしているような状態だとそれは尚更になる
ということでスクリプトでCPU監視し続けて,温度が一定値を超えたらSlackに通知を投げ,Remote Desktopで非常措置を迅速に行えるようにした(ソフトの関係上でWindows限定だけど)~~(ネットワークが切れた場合のことは知らんものとする)~~

## 大まかな筋書き

+ サーバーモードのOpen Hardware MonitorでPCを監視
+ NodeJSでそのAPIを叩いてJSONを取得・加工
+ CPUの状態を評価して必要な場合はWebhookのAPIを叩く
+ Slackで確認して対応する

# 内容

## Open Hardware Monitorの設定

### インストール

https://openhardwaremonitor.org/

### サーバーモードで起動
管理者権限で

元記事を表示

test

## タイトル
ssa
ssa
ssa
ssa
ssa
ssa

### タイトル
ssa
ssa
ssa
ssa
ssa
ssa

#### タイトル
ssa
ssa
ssa
ssa
ssa
ssa

#### タイトル
ssa
ssa
ssa
ssa
ssa
ssa

元記事を表示

sqlite3でキーの配列に対応するレコードを取得する方法の実行時間比較

# 前提
Node.js で sqlite3 モジュールを使用して試していきます
色々見当違いなことをしているかもしれないので見つけた方はコメントで指摘していただけると嬉しいです

# やりたいこと

下記のようなテーブルが存在するとします
|id (PK)|hash (UNIQUE)|
|:-:|:-:|
|1|abc|
|2|def|
|3|ghi|

この時、`[‘def’, ‘def’, ‘ghi’, ‘abc’]` という配列から `[2, 2, 3, 1]` という配列を得る良い方法を調べたのですが
うまく見つけられませんでした
そのため取得する方法を 4 種類考えて実際の実行時間を計測してみました

ベスト (ベター) プラクティスをお持ちの方はコメントで教えてください (切実)

# 手順
## レコード作成
### ハッシュ値作成
とりあえず 1-100 の整数値の md5 ハッシュ値を作成します
“`javascript
const length = 100
const crypto = require(‘crypto’)
const hashes = Array

元記事を表示

Nightwatch で E2E テストを行う時に webpack-dev-server を自動で起動・停止させる

# 環境

* Node.js@v15.3.0
* Nightwatch@v2.0.6
* webpack@v4.46.0

# やりたいこと

* 実際の e2e テストを行う前に、ローカル環境で e2e テストスクリプトが正しく動作するか、確認したい。
* ターミナルから webpack-dev-server を起動 → Nightwatch起動でもいいが、そうじゃない。
* コマンド1つで webpack-dev-server起動 → Nightwatchによるe2eテスト実行 → webpack-dev-server停止までを自動化したい。

# 結論
以下の様にする

## 前提
* webpack-dev-server 単体で、正しく動作する事
* Nightwatch 単体で、正しく動作する事
* ターゲットブラウザはChromeのみ

## ディレクトリ構成
/build
 webpack.conf.json
/test
 /e2e
  /specs
   test.js
  nightwatch.conf.js
  nightwatch.js
  runner.js

元記事を表示

Node.jsの通常関数のthisに関して

## 初めに
普段Node.jsを使用しており、通常関数のthisの基本的な仕様を勉強したためアウトプットのために記事を投稿する。

## 開発環境
■ Node.jsのバージョン
v11.1.0
■ 使用OS
Amazon Lunux 2

## ① 基本的な例

“`js
const o = {
name: ‘taro’,
introduce() { return `My name is ${this.name}`; }
}

console.log(o);
console.log(o.introduce());
“`

上記コードでは、oという定数にオブジェクトが格納されている。
以下は参考文献[1]より抽出したもの。

> メソッドが呼び出されるときthisは、そのメソッドがプロパティとなっているオブジェクトを指しています。

こちらを拝借すると、ここで指しているメソッドとは以下にあたる。
“`js
introduce()
“`

そして、メソッドがプロパティとなっているオブジェクトとは定数oである。
そのため、thisはoをバインドするため以下に置き換え

元記事を表示

Expressのデフォルトエラーハンドリングが作動しない??

# なにが起こったか?
“`ts
app.use((
// eslint-disable-next-line @typescript-eslint/no-explicit-any
err: any,
req: express.Request,
res: express.Response>,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
next: any
) => {
SentryLib.captureException(err)
LoggerLib.debug(`${err}`)
res.status(500).json({
data: {},
error: { message: ‘standard error’, code: ‘ServerError’ },
})
next()
})
“`

“`ts
export

元記事を表示

Heroku で デプロイ エラー (~version not specified in package.json)

# 開発環境
対象 バージョン
| 対象 | version |
|:———–|————:|
| Node.js | v15.4.0 |
| npm | 7.0.15 |

# 発生している問題・エラー
作成途中だったアプリを一時中断して、Nuxt.jsの学習をしていた。
久しぶりに途中だったアプリを`git push heroku main`をしたら、下記のエラーが出るようになってしまった。
どうやら、`Node version not specified in package.json`という部分が問題のようだった。
これは、Nodeのバージョンがpackage.jsonに記述されていないことらしい。
以前は普通にデプロイ出来てたのに、なぜこうなってしまったかは分からなかった。
“`デプロイログ.
remote: —–> Build failed
remote:
remote: We’re sorry this build is failing! You

元記事を表示

Deno Deep Dive – Denoでのアプリケーション実装Tips / Node.jsとの比較

## 概要

本記事ではNode.jsに代わるサーバサイドJavaScriptランタイムであるDenoについて、実際のアプリケーション実装で得られた知見をご紹介します。

まずはDenoの概要について説明し、アプリケーションを実装する上でのDenoの便利な使い方やAPI、各種ツールについて解説していきます。最後に筆者がDenoによる開発を経てNode.jsによる開発と比較した際のDenoの優れている点/不足している点を挙げていきます。

## Denoとは

DenoはNodejsの開発者であるRyan DahlがNode.jsの反省を活かして作り出したJavaScriptランタイムです。

https://deno.land/

特徴としては以下のものがあります。

– TypeScriptが**out of box**、つまり設定なしで実行できる
– ES Modules対応で依存モジュールはURLによってインポートする
– 権限管理が厳密
– フォーマッタやテストランナなどの便利機能がランタ

元記事を表示

【2022年版】Raspberry Pi 4とChinachuで録画サーバーを立てる

# はじめに
Chinachuを使って、ここ2年ほど録画サーバーを運用していました。2022年1月に、Raspberry Piの新しいOS「Bullseye」の安定版がリリースされました。OSのアップデートでは、MicroSDを書き直す必要があり、その再構築をした記録です。

以下の記事を参考に、2022年の環境での違いなどを交えつつ書いていきます。
[Raspberry Pi 4+Chinachu v0.10.1-gamma.0 地デジ録画サーバー構築](https://qiita.com/tomtwinkle/items/99fe34140fa5b1a70e7b)
[知識0からRaspberryPi4で録画機を作る!](https://zenn.dev/ryomm/articles/332bf27f8561da)

# おねがい
他の記事でも言われていることですが、自己責任でサーバーの構築をしてください。
趣味の範囲で、個人的な利用をお願いします。
テレビ番組のコピーや配信は違法になることがあリます。よく注意をして使ってください。
生じた損害に対して、筆者は一切の責任を負いません。

元記事を表示

Express で レスポンスに “Content-Type” ヘッダを自前セットする方法どれを選べばいいの

# 概要

Express 4 で、HTTPレスポンスヘッダーに “Content-Type” をマニュアルでセットする方法のハンズオン記録です

– “Content-Type” ヘッダをセットする書き方はよく見かけるアプローチだけでも
**res.type, res.set, res.header, res.setHeader, res.writeHead** がある
– それぞれの書き方、結果について実際にやってみた
– 例として、HTTPレスポンス時 の HTTPヘッダー **Content-Type** が
`Content-Type: text/plain; charset=utf-8` となるようにコードをかいてみる

## 先に、全体像 → Express で HTTPヘッダをセットする方法一覧

**「”Hello” を “Content-Type: text/plain;” ヘッダつけてレスポンスする」いろんなやり方**

メソッド コード例 説明

React による シングルページWebアプリケーション (SPA) の開発

# demoru.net でのサービス公開イメージ

![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539175/fd9cf1b9-6262-6ab0-964b-20cbd1f4b2cb.png)

demore.net とは、弊社で提供している SPA 体験サイトです。

# SPA とは何か? (アプリ利用者の目線)

Actor (アプリ利用者) にとって シングルページWebアプリケーション (以下 SPA) とは、いくつかの JavaScript ファイルと css ファイルで構成されている、ブラウザ上で動作するアプリです。

SPA は通常、ユーザ認証を行なってユーザを特定し、Web API を用いたさまざまな情報サービスを提供します。サーバサイドのデータベースやディスクスペースを利用することもありますが、これらのデータアクセスも例外はありますが Web API を用いています。

SPA ではない、従来のサーバサイドの Webアプリ は、ボタンやリンクをクリッ

Docker for Node.jsデベロッパのための大切な5つのセキュリティ

リモートのアルバイトで始めた仕事が、長期化、長時間化。
Slackでの開発者との仕事で、文字が小さくスレッドやチャンネル迷子は相変わらず日常茶飯事。

**Slackの中で、最初に覚えたマークダウンはまた、コードを`インライン表示`すること**
\` バッククォート`

最近、Qiitaでのありがたい編集のフィードバックで覚えた
**コードブロックの書き方**
(空行)
\`\`\`
code….
\`\`\`
(空行)

コーディングとは程遠いですが、新しいトリックを覚えるのはシンプルに楽しいなと思えた瞬間でした。

さて、今回はこちらの翻訳のご紹介です。

https://snyk.io/blog/docker-for-node-js-developers-5-things-you-need-to-know/

こちらに関連し以前ご紹介した
[安全なNode.jsのためのDockerイメージ構築のステップバイステップのチュートリアル](https://qiita.com/bricolageart/items/a509594a5b4c349e90b7)の翻訳も、ぜひ参

ワイ「Denoってなんぞや?」

# ?「やあ」
ワイ「前回はNode.jsについて知見を得たな」
ワイ「どんどん最強ぷよぐらまに近づいてまうで^^」
?「やあ」
ワイ「急になんやこの恐竜」
ワイ「某J民か?」
?「あんなのと一緒にしないでよ」
?「僕は**Deno**だよ」
ワイ「誰だよ(ピネ」
?「**Node.js**の親戚みたいなものさ」
ワイ「Node.jsくんにも親戚がおったんか」
ワイ「初耳やわ(ハナホジ」

# ?「Denoについて」
![logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379533/2a04d4c0-7418-5070-e5f0-01407108cc08.png)
?「Node.jsのついでに知ってもらおうと思って」
?「今ここにいるんだ」
ワイ「ほーん しゃあない聞いたるわ」
?「……」
?「**Deno(ディーノ)** はRyan Dahlによって作られた比較的新しいJavascript/Typescriptランタイムだよ」
ワイ「誰やその人」
?「**Node.js** を作った

クリップボードを共有するPWAアプリの作成

WindowsとAndroidでテキストを共有したいことがよくあり、最近はMacやiPhoneとも共有することが増えてきたので、クリップボードのテキストを共有するPWAアプリを作成します。
PWAにすれば、アプリっぽく使えるのと、後程示すショートカットが便利だったりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/94d92292-2e5d-b27d-1fe7-a842b7dc008f.png)

以下のGitHubにソースコードを上げておきます。

poruruba/ClipShare

https://github.com/poruruba/ClipShare

#テキストの共有方法

単に、Node.jsサーバを立ち上げて、テキストを保持するようにし、HTTP Post呼び出して、Set/Getするようにしているだけです。
ソースコードを載せますが、大したことはやっていません。
一応、セキュリティを考慮して、APIKeyがあっていないと受け付けないようにするの

imagemin-mozjpegのバージョンを最新にしたらrequire()のエラーが出てはまった

## 事の発端は軽い気持ちでバージョンを上げただけ

1年ぶりぐらいに手元の開発環境をアップグレードしようと思い何も考えずにバージョンをアップデートしたことが始まりでした。

## imageminのビルド時だけエラーが出始める

エラーの内容を適当にコピペして海外サイトとかを徘徊したが、原因が掴めず・・・。

“`lang=”bash”
const imageminMozjpeg = require(‘imagemin-mozjpeg’)
^

Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/techthree/projects/tech-three/pug_sass_webpack/node_modules/imagemin-mozjpeg/index.js from /Users/techthree/projects/tech-three/pug_sass_webpack/imagemin.js not supported.
Instead change the re