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

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

connect-flashのメッセージが消える

Express3系でFlashメッセージを表示する為、connect-flashというパッケージを追加して、(勝手に)罠にハマったので共有しておきます。

https://www.npmjs.com/package/connect-flash

サンプルコードを見ながら、下記のようなコードを書いて動作チェックしました。

“` app.js
app.get(‘/flash’, function(req, res){
req.flash(‘info’, ‘Flash is back!’)
res.redirect(‘/’);
});

app.get(‘/’, function(req, res){
console.log(req.flash(‘info’)); // デバッグ用にメッセージを仕込んだ
res.render(‘index’, { messages: req.flash(‘info’) });
});
“`

“` index.ejs
<% if (messages){ %>

<%= messages %>

<% } %>
“`

元記事を表示

大学1回生がソリューションエンジニアとして働いてわかったこと

# はじめに
こんにちは、学生エンジニアのMasamichiです。最近大阪に引っ越したのですがあまりのアクセスの良さにびっくりしてます。ただ車を運転したいなとは思わなくなりました()

今回は、2023年11月〜2024年2月まで株式会社プレイドにてエンジニアインターンに参加してきたので、その体験記を書いてみました。

# インターンについて
## ポジション
僕が今回ついたポジションは[カスタマーエンジニア](https://www.wantedly.com/projects/1418410)という職種です。
※僕はこの部署の中で特にソリューションエンジニアという配役だったので、今回はソリューションエンジニアという職業について言及しています。

## 仕事内容
社内では自社SaaSである「KARTE」の**ソリューション開発をする**という仕事をしました。具体的には、導入企業からご意見をいただいたり社内で新たな使い方を検証したい機能を、設計・実装・発信するという一貫したプロセスを体験できました。以下に自分が実装したソリューションの一覧を載せておきます。

https://soluti

元記事を表示

Node.jsを使った定期的なファイル同期の構築手順

# node-cronを使ったフォルダ同期の環境構築

Node.jsとnode-cronパッケージ、rsyncユーティリティを使用して、指定のフォルダ間で15秒ごとにファイルを同期する環境を構築します。

## 前提条件

– Node.jsがインストールされていること
– node-cronパッケージがインストールされていること
– rsyncユーティリティがインストールされていること
– 対象のフォルダ(/bitnami/wordpress/wp-content/uploads/ と /home/bitnami/Dropbox/wp-uploads/)が存在していること

## 手順

### 1. Node.jsとnpmのインストール

Node.jsの最新版をインストールします。

“`bash
curl -sL https://deb.nodesource.com/setup_current.x | sudo -E bash –
sudo apt-get install -y nodejs
“`

node-cronパッケージをインストールします。

“`bash
n

元記事を表示

Node.jsとMessagingAPIでLINEの応答ボットを作る

## はじめに
業務でLINEのMessagingAPIを使ったサービスの開発をすることになりました。
練習のためLINEの応答ボットを作ってみたので、その手順を説明します。
なお、本記事は以下2点が前提となっています。
* JavaScript、Node.jsの知識があること
* GitHubのアカウントを持っていること

## LINE関連の設定
### LINE Business IDの作成
Messaging APIの機能を使用するためにはLINE Business IDが必要です。
以下のURLにアクセスします。
https://manager.line.biz/

「アカウントを作成」をクリックします。

「メールアドレスで登録」を押下します。

【API Gateway】IPアドレスによるアクセス制限を実装・設定する方法

API Gatewayで実装したAPIにおいてIPアドレスによるアクセス制限をする必要が出てきたため、その方法を調査・実装した。

# 結論
API GatewayのLambdaタイプオーソライザーを作成し、特定のIPアドレスにのみ認可を与えることでアクセス制限をかけることができる。

# 実装内容
まず、オーソライザーの本体となるLamnda関数を実装する。

“`javascript
exports.handler = async (event) => {
if(event.authorizationToken){
// X-forwarded-forの内容がトークンに設定されるので、
// カンマで区切りで取得したIPアドレスの一番最初の要素がアクセス元のIPアドレスになる
ip = event.authorizationToken.split(‘,’)[0].trim();
}
else{
return generatePolicy(‘user’, ‘Deny’, event.method

元記事を表示

Webフレームワークを集めたDockerComposeを作ってみた

# 今回作成したリポジトリ

https://github.com/perilla0/web_frameworks_template

# はじめに

これまで、フレームワークごとにテンプレリポジトリを作っていたのですが、プロジェクトの切り替えが面倒だったり、DockerComposeごとにNginxやDBサーバーを定義したり、Githubリポジトリが増えすぎたりと不都合を感じておりました。

なので、バックエンド、フロントエンドのフレームワークをまとめたDockerComposeを作成することにしました。

今後のWebフレームワーク追加や削除がしやすいように、構成に少し工夫も加えました。今後は、Webフレームワークを追加したいときは、今回作成したテンプレリポジトリに追加していくことにします。

本テンプレリポジトリは、あくまでWebフレームワークのインストールから初期画面の表示までの簡素化を目的としております。

# DockerComposeに含まれるサービス

READMEに詳細がありますが、本記事でも簡単に説明させて頂きます。

## バックエンド

– Laravel(PH

元記事を表示

色々と asdf に移行してみる 2024年3月

# asdf とは

asdf-vm/asdf-plugins: Convenience shortname repository for asdf community plugins
https://github.com/asdf-vm/asdf-plugins

# 色々とasdfに移行しようと思ったわけ

主な動機は2つ

* これまで、 rubyenvやらpipenvやらSDKMANやらasdfやら色々と使っては移行して、いい加減しんどいので asdf に寄せようと思った。
* そろそろメインマシンに性能不足を感じているので新マシン購入に備えての準備。(動機大事)

# 今回 asdf で管理する対象としたもの

* deno
* helm
* kind
* kubectl
* kubeval
* kustomize
* minikube
* nodejs

# 所感

プラグイン数が凄いことになっていてちょっと感動した。もう asdf だけで生きていければ嬉しいなぁ…

asdf-vm/asdf-plugins: Convenience shortname re

元記事を表示

JS/TSでvarは何で嫌われてるの? 【JavaScript Node.js TypeScript 初心者プログラマー】

## 最初に
今回は**初心者向け**に何故varが嫌われているのか書いてみました。
誤字脱字等ありましたら、優しく教えていただけると幸いです。

# なんでvarって嫌われてるの?
そもそもconst let varの違いを理解していますか?
一旦それぞれの特徴について、もう一度まとめてみましょう

| 宣言方法 | 再宣言 | 再代入 |
|:——– |:——|:——-|
|const | 不可 | 不可 |
| let | 不可 | 可能 |
| var | 可能 | 可能 |

これをふまえた上で嫌われている理由をまとめていきます。

### 1: 再宣言が可能
初心者の方は再宣言可能の何がいけないのか?と思いますよね?再宣言はプログラムが長くなればなるほど、面倒な仕様になっていきます。

“`js
var hello = “hello world”

var hello = “hey”

console.log(hello)

// console: hey
“`
このくらいの行数ならhelloが再宣言されているのでログ出力時にはhello wo

元記事を表示

【Amazon Cognito】ログイン失敗とロックアウトを見分ける方法

Amazon Cognito のユーザー認証機能を使ってログイン機能を実装しているシステムで、連続で複数回ログインに失敗するとロックアウトが発生するが、単にログインに失敗しているだけなのか、ロックアウトが発生しているかが見分けがつかなかった。

そこで、今回はロックアウトを見分ける方法について調査結果を共有します。

# 結論
ログインに失敗した場合も、ロックアウトによる失敗もNotAuthorizedExceptionが発生するが、メッセージに違いがあるため、それを参照することで見分けることができる。

ログイン失敗の場合
“`
Incorrect username or password.
“`

ロックアウトによる失敗の場合
“`
Password attempts exceeded
“`

# 調査と検証
Cognitoでのイベント履歴はCloudTrailで確認することができる。
CloudTrail > イベント履歴でイベント名「InitiateAuth」でフィルタリングするとわかりやすい。
![スクリーンショット 2024-03-23 12.30.16.png](

元記事を表示

JS/TSでnpmライブラリを作る時の注意点まとめ

## この記事を書くきっかけ
先日、自分で[ライブラリ](https://www.npmjs.com/package/log4debug)を組んでみて色々学ぶことがあったので今回はまとめてみました。

自分が作ったライブラリに関しては以下の記事にまとめていますので、良かったら見てください!!

https://qiita.com/ROBOTofficial/items/f6ae594f27117cf14ccc

## 最初に
今回はJS/TSでライブラリ作成をする場合の注意点をまとめていますが、もしかしたらnpmの仕様変更等で今後この記事の内容が的外れになるかもしれませんので、鵜呑みにはしないでください。
またこの記事は**初心者向け**です。上級者や中級者の方は退屈かもしれません。その時は躊躇なくブラウザバックしてください

あと大前提として、この記事はnpmライブラリを作る時の注意点であってnpmライブラリの作り方ではありません。
npmライブラリの作り方は、また後日あげる予定ですので待っていてください

## 1 コードをきれいに
GitHubに公開しないから大丈夫と思っているあ

元記事を表示

Proxy環境下でAWS SDKv3 for JavaScriptを使う

AWS SDKでAmazon CloudSearchを利用する際にどハマリしたので備忘録として作成。
~~ずっと認証情報が渡せてないと勘違いしてたのは内緒~~

## 環境
“`
$ node –version
v21.7.1
$ yarn –version
1.22.19
“`

## 必要パッケージのインストール
“`
$ yarn add @aws-sdk/client-cloudsearch-domain @aws-sdk/credential-provider-ini @smithy/node-http-handler https-proxy-agent dotenv
“`

– @aws-sdk/client-cloudsearch-domain : Amazon CloudSearchに検索リクエストを実行
– @aws-sdk/credential-provider-ini : `~/.aws/credentials`からAWSの認証情報を読み込む
– @smithy/node-http-handler : HTTPリクエストハンドラ
– https-pro

元記事を表示

初めて自分でモノを作った [Node.js MongoDB AWS Terrafrom GitHubActions]

## 背景
・新卒SIerで3年半ほどインフラエンジニアとして働いていた(今は退職して転職準備中)
・インフラだけでなくアプリ側も経験したく、アプリ側の勉強のアウトプットとして今回のアプリを作った
・「Reactまで導入しよう」「UIUXももっと快適にしたい」「未経験であんな凄いの作ってる人がいるのに」などあるが、初めに考えていた構想が実装できたので一つの区切りとした

## どういうアプリ
好きな漫画の言葉を閲覧投稿するアプリ。
「漫画 名言」等検索した時に漫画ごとでグルーピングされてるモノがなかったのと、既に作成側で上げた言葉が紹介されていて自分で上げられるモノがなかったので作ろうと思った

アプリ名:**ふぁぼワード**

アプリURL
https://thehiroapp.com/
※12~21時で起動してます

GitHubリポジトリ
https://github.com/hiroXXI/hiro-app

### 機能
・言葉(画像)の投稿、編集、削除
・スキ!(お気に入り)機能
・検索機能
・ソート機能
・ページネーション機能

・ユーザ登録
・ログインログアウト

元記事を表示

VercelサーバーにUpした静的ページにBasic認証を設ける方法

# Vercel使ってますか!?

セットアップも便利でGithubとの連携も容易な[Vercel](https://vercel.com/)ですが、Basic認証の方法を忘れそうなので、備忘録のために残しておきます。

https://vercel.com/

## ソースファイルをGithubに連携

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028663/e5246d19-fead-194e-8b72-83f023cdf821.png)

このサンプルのプロジェクトをGithubに連携します。
Githubの連携は割愛します。

## middleware.jsを作成

src/middleware.jsを作成します。
package.jsonにBasic認証の関連するパッケージも追加しておく必要があるのでお忘れなく。

“`
# ターミナル or bashで
yarn add @vercel/edge basic-auth static-auth
“`

“`j

元記事を表示

npm -v すら実行できなかった際の対応

`npm -v` を実行すると以下のエラーが出た。
なんの操作をしてこのようになったのか記憶がない…

“`bash
$ npm -v
ERROR: npm v10.2.5 is known not to run on Node.js v13.13.0. This version of npm supports the following node versions: `^18.17.0 || >=20.5.0`. You can find the latest version at https://nodejs.org/.

ERROR:
/Users/IsamuUmetsu/.nodebrew/node/v13.13.0/lib/node_modules/npm/lib/utils/exit-handler.js:19
const hasLoadedNpm = npm?.config.loaded
^

SyntaxError: Unexpected token ‘.’
at wrapSafe (intern

元記事を表示

JS&TS用に画期的なログ出力ライブラリを作ったので報告

# 何を作ったの?
今回自分が作ったライブラリはこちらになります。

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

このリンクだけだとまだ分からないと思うので説明していこうと思います。
## どういうライブラリ?
簡単に言うと従来のconsole.logを改造する様なライブラリです。
まず以下のコードを見てみてください
“`typescript
import log4debug from “log4debug”

log4debug.set(log4debug.defaultTemplate)

console.log(“This Package is JavaScript and TypeScript’s Logger”)
“`
これ普通にログ出力されると思いますよね?
実はこれlog4debug.setをやることによって、console.logが改造されて以下のようにログが出力されるんです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26

元記事を表示

Voltaを使用したNode.jsバージョン管理

## はじめに

Voltaを使用してみて、Node.jsのバージョン管理が楽になったので、
インストール方法と、コマンドを簡単に紹介します。

## Voltaとは
VoltaとはNode.jsのバージョン管理ツールです。
「高速」「信頼性」「ユニバーサル」が代表的な特徴として挙げられています。

[Volta](https://volta.sh/)

## Voltaの魅力
* Windows, Mac両方の環境で使用可能
* プロジェクトごとに自動でバージョンを変更可能
* インストール、操作が簡単

## インストール
:::note warn
Node.jsや他のバージョン管理を利用している人はアンインストールが必要です。
:::

最新のインストーラをダウンロードする。
[https://docs.volta.sh/guide/getting-started](https://docs.volta.sh/guide/getting-started)

:::note warn
Windowsの場合設定画面から開発者モードをオンにする必要があります。
「設定」→「プライ

元記事を表示

express routing

# express routing

## 基本

“`
app.METHOD(PATH, HANDLER)
“`

– app : expressのインスタンス
– METHOD : post, get, put …(HTTPメソッドを小文字にしたもの)
– PATH : サーバ上のパス(URLのパス?)
– HANDLER: URLがPATHとマッチしたしたときに実行するメソッド

## 基本サンプル

– 基本はHTTPメソッド毎に、処理(メソッド)を割り当てる

“`
// GET メソッドルート
app.get(‘/’, function (req, res) {
res.send(‘GET request to the homepage’)
})

// POST メソッドルート
app.post(‘/’, function (req, res) {
res.send(‘POST request to the homepage’)
})
“`

– すべてのHTTPメソッドを割り当てる

“`
// 共通処理を仕込んでメソッド毎の処理はnex

元記事を表示

expressの備忘

# express

## 参考

– [Express](https://expressjs.com)

## インストール

“`
# package.jsonの作成
# entry point: (index.js) はお好みで。”app.js” もよくある。
npm init

# –save でpackage.jsonに追加されるので、後で構築しやすくなる。
# これはモジュールのみnode_modulesにインストールされる
npm install express –save
“`

## Hello Wolrd サンプル

– 000.HelloWolrd_index.js

“`
const express = require(‘express’)
const app = express()
const port = 3000

app.get(‘/’, (req, res) => res.send(‘Hello World!’))
app.listen(port, () => console.log(`Example app list

元記事を表示

express middleware

# express middleware

– [express middleware](http://expressjs.com/en/resources/middleware)

## [body-parser](http://expressjs.com/en/resources/middleware/body-parser.html)

各ハンドラを実行する前に、request ボディを解析して、req.body プロパティで使えるようにする

– 使い方

“`
var app = require(‘express’)();
var bodyParser = require(‘body-parser’);

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json({type: “application/*+json”}));
“`

– json parser
– リクエストされたデータがjson形式にする。req.body で参照可能。
– typeプロパティを指

元記事を表示

Node.jsまとめ

# Node.js まとめ

## 参考

## リスト

– [Node.js本家](https://nodejs.org)
– [Node.js日本ユーザグループ](https://nodejs.jp/)
– [npm](https://www.npmjs.com/)
– Nodeのパッケージマネージャ

“`bash
# Nodeで作成する前に実行してpacakge.jsonを作成しておく
npm init
# npm でパッケージを追加
npm install [package name] –save
npm install [package name] –save-dev

# どこかから持ってきた環境でpacakge.jsonがあれば以下で必要なパッケージがインストールされる
npm install
“`

– [NodeSchool](https://nodeschool.io/ja/)
– NodeでNodeを学習

– [Express](http://expressjs.

元記事を表示

OTHERカテゴリの最新記事