Node.js関連のことを調べてみた

Node.js関連のことを調べてみた

【OpenSSL】localhost を https 化する 自己証明書の作成方法

自己証明書(通称オレオレ証明書)の作成方法です :smiley:

## 1. CA用の秘密鍵を生成
このコマンドは、2048ビットのRSA秘密鍵を生成し、`localCA.key` というファイルに保存します。

“`bash
$ openssl genrsa -out localCA.key 2048
“`
– openssl genrsa: RSA 秘密鍵を生成するコマンド
– -out: 生成した秘密鍵の出力ファイル名 (例: localCA.key)
– 2048: 秘密鍵の長さ (ビット単位) (例: 2048ビット)

## 2. 秘密鍵と識別情報から証明書署名要求 (CSR) の作成
このコマンドは、以下の情報を設定した CSR を生成し、`localCA.csr` というファイルに保存します。

“`bash
$ openssl req -batch -new -key localCA.key -out localCA.csr \
-subj “/C=jp/ST=Osaka/L=Osaka-shi/O=\”Example Inc\”/OU=Foo/CN=

元記事を表示

Nodeのビルドインオブジェクトを拡張する

## 目的
配列の`remove`メソッドなど、JSのビルトインオブジェクトには存在しないメソッドを拡張して定義したい

## 問題点
こんな感じで関数を定義してもいいけど、
“`typescript
function remove(array: T[], removeElement: T): T[] {
return array.filter(element => element !== removeElement)
}

remove([‘a’, ‘b’, ‘c’], ‘b’) // [‘a’, ‘c’]
“`
やっぱり配列のメソッドとして拡張ができた方が、使いやすいし読みやすい。
swiftなら`extension`で、Kotlinなら関数の前にレシーバータイプを記述することで拡張関数を定義できる。
しかしTypescriptにはそのような文法はない。

## 解決策
まず配列のアンビエント宣言を追加し、型チェックができるようにする。
その後配列のprototypeオブジェクトに任意の名前で関数を代入する。
“`typescript
export {}

d

元記事を表示

Reactに星評価UIを実装する

## Reactに星評価UIを実装する

Reactで簡単に星評価UIを実装する方法を紹介します。この記事では、`react-icons`パッケージを使用して星のアイコンを表示し、`react-bootstrap`パッケージを使用してスタイリングを行います。

完成イメージ
![スクリーンショット 2024-03-19 053434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3680988/974d1529-8a49-ae63-2de9-3df97d772c74.png)

#### ユーザによる星評価:
– ユーザが星をクリックして評価を変更できます
– 通常はクリック可能な星アイコンを表示します

#### 星評価表示:
– ユーザの評価を表示するだけであり、評価を変更することはできません
– 通常はクリック不可能な星アイコンを表示します

### 1. `react-icons`のインストール

まず、`react-icons`パッケージをインストールします。

“`bash
npm ins

元記事を表示

SequelizeのonUpdateはPostgreSQLで機能しない

## 今回、罠にハマった問題
データベースがPostgreSQL、ORMにsequelizeを使った環境で、migrate機能を使ってテーブルを作成しました。
データの更新日時を記録したかったので、updated_atのカラムを追加したのですが、UPDATE文を発行してもupdated_atは更新されませんでした。

“` migration.js
updated_at: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.literal(‘CURRENT_TIMESTAMP’),
onUpdate: Sequelize.literal(‘CURRENT_TIMESTAMP’)
}
“`

(onUpdateがあるので日時は自動更新されそうな雰囲気ですが)

## 原因
PostgreSQLには、データの変更時に日時を更新する機能が備わっていない為、Sequelizeのmigrationファイルで設定してもデータベースには何も反映されていないと考えられます。

## 解決

元記事を表示

Mongo リストの合計数、条件付き範囲のクエリー

“`javascript:user.js

$project: {
_id: 1,

totalQuestClearCount: {
$reduce: {
input: { $ifNull: [“$quests”, []] },
initialValue: 0,
in: {
$cond: [{ $eq: [“$$this.storyId”, 0], $eq: [“$$this.totalClearCount”, 1] },
{ $add: [“$$value”, 1] },
“$$value”
]
}

元記事を表示

Azure Static Web Apps(Node.js) で、ストリームなChatGPTを構築する

# はじめに
ChatGPTなシステムを作るときに、Azure Static Web Appsは最善の方法の1つですが、これまではストリームができないという課題がありました。(.NETならできるんですが)

と、つい最近以下のアナウンスが出ました。
[Azure Functions: Support for HTTP Streams in Node.js is now in Preview](https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-functions-support-for-http-streams-in-node-js-is-now-in/ba-p/4066575)
これで、Node.JSのFunctionでStreamが扱えるようになったので、その動作をざっくり検証してみます。(Pythonも早くできるようになるといいですよねぇ)

上記ブログにもありますが、以下の前提条件が必要です。古い場合は適宜更新してください。
> – Version 4 of the Node.js programmin

元記事を表示

nvmコマンドでNodeのバージョンを簡単に切り替える方法

## 概要

– nvm(Node version manager)とは、Node を複数バージョン管理するためのユーティリティです
– この記事では、nvm を使用して Node のバージョンを追加・切り替方法について記載します
– [nvm](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating)の GitHub をベースに記載しています
– バージョンを簡単に切り替えられことによって、異なるバージョンでの動作確認や、異なるバージョンでの開発が可能になります

## 手順

1. nvm をインストールする
“`bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
“`
2. 環境変数を設定する
– 下記コマンドをそのまま実行する
“`bash
export NVM_DIR=”$([ -z “${XDG_CONFIG_HO

元記事を表示

Next.jsをGitHub挟んでCloudflare Pagesにデプロイする

# はじめに
色々詰まったので解決までかかった内容を全て書いておきます。Cloudflare C3を使ってプロジェクトを構築し、あとからGitHubを挟んだデプロイに変更してみます。
詳しくは理解していないので間違っている点あるかもしれないです。

https://developers.cloudflare.com/pages/framework-guides/nextjs/deploy-a-nextjs-site/

# 環境
* Ubuntu 22.04
* VirtualBox

(PC自体はWindows 11を使用)

まず最初にPowershellを試して、次にWSLを使ってみたがどちらも失敗してしまった。WSLについてはUbuntuを使ったが、“`npm create“`を行うとCMD.exeが起動してしまい、なんやかんやよくわからなかった。
ということでVirtualBoxにした。関連するエラーは以下のリンクに示す。

https://stackoverflow.com/questions/77152589/cannot-find-npm-on-appdata-ro

元記事を表示

Node.jsとは何か

Node.jsに関連する、npm、nvmが似たような言葉ばかりで理解しづらい。
大体の環境系トラブルはここに集約する(と思っている)ので、ほぼ自分用にまとめてみることにしました。

## 環境

– WSL 2
– Ubuntsu 20.04.6 LTS

## Node.jsとは

Javascriptをサーバーサイドでも使えるようにしたもの。ブラウザ側、サーバー側、双方で同じ言語が使えると効率が良いためよく使われている。

ただ、主に私がRuby on Railsを学習する中でよく出てくるNode.jsの役割とは、開発環境の補佐的な役割として使っていることが多いです。

– Node
JavaScriptを実行するためのエンジン。

– npm
Node.jsのパッケージを管理するためのツール。Node Package Managerの略。
npmを介して様々なパッケージをインストールできる。RailsでいうところのGemと同じような役割。

– nvm
バージョン切り替えツール。Node Version Managerの略。

元記事を表示

【toio】toio.jsでサンプルプログラムを動かすまでの手順について

## はじめに
「Node.jsって何?」というレベルのプログラミング初心者がtoioのJavaScriptライブラリで開発を始めるまでに、時間がかかったので、手順を備忘録としてまとめておきます。参考にして頂ければ幸いです。

## 動作環境
Windows11
Node.js:v20.11.0
npm:10.2.4
yarn:1.22.21

## 必要なもの
– Bluetooth USBアダプタ
Windowsで環境構築する場合、toio.jsが使用している「noble」ライブラリの関係で、内蔵Bluetoothではなく、**別途Bluetooth4.0 USBアダプタが必要**になります。
今回は、エレコムのアダプタを使用しましたが、問題なく動作しました。
[Bluetooth(R) USBアダプター LBT-UAN05C2](https://www.elecom.co.jp/products/LBT-UAN05C2.html)

詳細は[nobleの前提条件](https://github.com/noble/noble?tab=readme-ov-file#wind

元記事を表示

WSL Ubuntuにnodenvにinstallする方法

# WSL Ubuntuにnodenvにinstallする方法

WSL Ubuntuに[nodenv](https://github.com/nodenv/nodenv)をinstallする方法

## updateとupgrade

“`bash
sudo apt update && sudo apt upgrade -y
“`

## nodenvのinstall

“`bash
git clone https://github.com/nodenv/nodenv.git ~/.nodenv
cd ~/.nodenv && src/configure && make -C src
# 環境変数の設定
echo ‘export PATH=”$HOME/.nodenv/bin:$PATH”‘ >> ~/.bashrc
echo ‘export PATH=”$HOME/.nodenv/bin:$PATH”‘ >> ~/.bash_profile
echo ‘eval “$(nodenv init -)”‘ >> ~/.bashrc
“`

## pluginのinstall

元記事を表示

同じexpressのプロセスでドメインごとに違うページを表示する

# はじめに
– expressでサーバーを起動
– example1.jpとexample2.jpで別のサイトを表示したい
– おなじNodeJSのプロセスで複数ドメインを扱う方法で悩んだ

# 解決策
Routerというもので分岐ができるらしい
ドメインでも分岐できないか?
→使い方が正しいかわからないけど下のコードで解決!

# コード
“` index.js
const express = require(“express”);
const app = express();

// ドメインごとに読み込む
const domain1 = require(“./example1.js”);
const domain2 = require(“./example2.js”);

app.use( (req, res, next) => {
// アドレスのホスト名(ドメイン)
var host = req.hostname;

if( host == “example1.jp” ) {
// routerに飛ばす
domain1(req, res,

元記事を表示

nodejsサーバーをsystemdに登録する!

# はじめに
– linuxにSSHを使って接続中
– コマンドでサーバーの起動・停止をしたい
– 再起動したときにサーバーを自動で起動するようにしたい!
– nodejsのサーバーをコマンドラインで起動していて、再起動するときに毎回`Ctrl+C`→`node index.js`はめんどくさい!

# 1. systemdへの登録
nanoなどで下のファイルを作成して編集します
`sudo nano /etc/systemd/system/myNodeServer.service`

“` sh: /etc/systemd/system/myNodeServer.service
[Unit]
# プログラムの名前
Description= Node.js Server

[Service]
Type=simple
User=username
# nodejsの動いているディレクトリ
WorkingDirectory=/home/username/Desktop/node/
# 起動するためのスクリプトの配置先
ExecStart=/home/username/Desktop/nod

元記事を表示

Docker上で動かしているWebサーバーのログが見たい

# 前提
– DockerはDocker composeを使用
– WebサーバーはNode.js + pm2

# 結論
“`sh
$ docker compose logs [サービス名]
“`

# ハマったとこ
Docker間で通信を行っている処理があり、その通信が失敗していたためその検証がしたかった。
しかし、Docker内でのログの出し方が分からず、余計な時間を割いてしまったため、記録しておく。

### ハマった原因
– 自分がそもそもDockerで動いているNode.jsのログの見方を分かってなかった

### 解決した経緯
– pm2を利用していることを知っていたので、pm2のログが出せることを知ったため

– 最初に上記の方法でログが出せることを確認した
– `$ docker compose log`でも同じようにログを出せることがわかった

https://matsuand.github.io/docs.docker.jp.onthefly/engine/ref

元記事を表示

[初心者向け]Nest.jsでSwaggerを使ってAPIドキュメントを自動生成する方法について徹底解説!便利なデコレータの使用方法も解説

## 概要
Swaggerを使ってNest.jsのAPIのドキュメントを自動生成する方法について解説します

## 前提
– Nest.jsのアプリケーションを作成済み
– APIを作成済

## 必要なパッケージのインストール
@nestjs/swaggerをインストールします

“`
npm install @nestjs/swagger
“`

## Swaggerの設定
main.tsに以下のようにSwaggerの初期設定を行います
今回は127.0.0.1:8000/api/docsへアクセスするとSwaggerが起動します

“`main.ts
import { NestFactory } from ‘@nestjs/core’;
import { SwaggerModule, DocumentBuilder } from ‘@nestjs/swagger’;
import { AppModule } from ‘./app.module’;

async function bootstrap() {
const app = await NestFactory.c

元記事を表示

SendGrid Webhookを用いて送信失敗メールをキャッチする

## はじめに
SendGrid APIを用いて送信したメールのうち、送信失敗したメールをキャッチしたかったので、方法を模索し実装しました。
実用性のあるメソッドだと思うので、記事として残そうと思います。

## SendGridとは
サーバーを構築せずにAPIベースでメール送信をできるプラットフォームです。
導入はとても簡単です。詳しくは下記ページを参照。

ホーム

## Webhookとは
外部アプリケーション連携手段の一つです。
APIと異なり、こちらから通信を行うのではなく、外部アプリケーション側から情報を送ってもらいます。
API通信の場合はこちらから都度通信を行わないと情報を取得できません。したがって、外部アプリケーション側でトリガーを持っており、リアルタイムで情報を取得したいときにWebhookが有用です。
下記記事の説明がわかりやすかったです。

https://qiita.com/soarflat/items/ed970f6dc59b2ab76169

## SendGridでのメール送信
SendGridでメー

元記事を表示

Lambda Node.js serverlessを使うほどでもないちょっとした関数を書きたいときのDocker環境を作ってみた

## 概要

Lambdaにて小規模なコードを記載したい場合にちょっと楽できるようなDocker環境を作ってみました。

## 発端

小規模な処理(例えばSESのバウンス情報をSNSからLambdaを経由してSlack通知したい場合)をLambdaで使いたい場合、下記のようなジレンマがある。
– Lambdaのブラウザのエディタで書くのはなんかテンションが上がらない、普段から慣れてるエディタを使いたい。。。
– serverlessだとリッチ過ぎる、学習コストもかかる。。。
– 慣れてるエディタで書こうとしてローカルPCのNode.jsを使って書くと、複数の開発者がいる場合バージョン合わせが大変。。。

Dockerならこの辺を一挙に解決できるのではと思い今回環境を作ってみました。

## 御託はいい、早くその環境をよこせ

もちろんどうぞ!
↓こちらから取得いただけます。完全にフリーで利用いただけます。おそらく利用方法はREADMEを呼んでいただければ大丈夫だと思います!

https://github.com/miriwo0104/nodejs_20_lambda_local_d

元記事を表示

nodeでテンプレートエンジンっぽいものを作った

## 背景
同じようなページを複製したいけど、それだけのためにEJSやPugを入れるのも面倒。。。
じゃあ自分でサクッと作ろう!

## 環境
node 20.10.0
npm 10.2.3

## 前提
以下のポケモン151匹のデータが入ったJSONをもとに、 (JSONは記事最下部に記載)
“`pokeData.json
[
{
“no”: 1,
“name”: “フシギダネ”,
“abilities”: [“しんりょく”],
“stats”: {
“hp”: 45,
“attack”: 49,
“defense”: 49,
“spAttack”: 65,
“spDefense”: 65,
“speed”: 45
}
},
{
“no”: 2,
“name”: “フシギソウ”,
“abilities”: [“しんりょく”],
“stats”: {
“hp”: 60,
“attack”: 62,

元記事を表示

express-sessionとMemcachedでセッション管理する方法

Node.jsのExpressでセッションを管理したい場合、”express-session”パッケージを使用します。また、サーバー側のセッション情報の保存はMemcachedを使用します。

ローカルの開発環境で動作させるには、Memcachedをインストールして、サービスを起動しておく必要があります。
Macで環境を構築する方法は前回の記事を参照してください。

前回:[Macにmemcachedをインストールする](https://qiita.com/SolitaireEgg/items/01c88221fd4a9fc6d36a “Macにmemcachedをインストールする”)

## インストール

Node.jsおよびExpressはインストールされている前提で、新たに下記3つのパッケージをインストールします。

“` console.sh
npm install express-session
npm install memcached
npm install connect-memcached
“`

## Expressに設定を追加する

“` app.js
c

元記事を表示

Discord.jsでプログラムがエラーを吐いても起動させ続ける

# 前置きの前置き
何と
“`js
process.on(‘uncaughtException’, err => console.log(err))
“`
**このコードをどこかに書いておけば大丈夫だそうです**
(つまりこれはただのライブラリ紹介)
# 前置き
多分初投稿のumisoraです
PCの起動時に.batでbotも起動できるかなーとか思いながら調べていましたら
pm2というライブラリを見つけたので忘備録 + 紹介です…!
# 仕組み(ざっくりと)
どうやらエラーを吐いたプロセスをもう一度起動する仕組みのようです
もっと詳しく知りたい方は調べてみるといいかもしれません
# 結局どうやるの?
やり方はいたって簡単
まずはnpmでpm2をインストールします
“`bash
npm install pm2 -g
“`
そしたら皆さんいろんなランタイムを使ってるかもしれませんが起動コマンドを
“`cmd
pm2 start [botが起動するファイル名(拡張子省略不可)]
“`
とします(一応cdかなんか使ってbotが起動するファイルのあるディレクトリで実行してください

元記事を表示

OTHERカテゴリの最新記事