Node.js関連のことを調べてみた2023年01月28日

Node.js関連のことを調べてみた2023年01月28日

Hexabaseのアクション拡張プログラムを使って、サーバーサイドでスクリプトを実行する

[Hexabase](https://www.hexabase.com/)はエンタープライズ向けのBaaS(Backend as a Service)を提供しています。主な機能としてはデータベース、ファイルストレージ、認証、リアルタイム通信などになりますが、それだけで全ての開発要件を満たせる訳ではありません。

そこで、足りない機能を開発し、コードをサーバーサイドで実行できるアクション拡張プログラムが用意されています。いわゆるFaaS(Function as a Service)のようにして、スケーラブルにコードを実行できます。

今回はそのアクション拡張プログラムの使い方と、[blastengine](https://blastengine.jp/)を使ってメール送信を行う(ネットワーク通信を行う)方法を解説します。

## 開発者機能を有効にしてください

アクション拡張プログラムを使う場合には、Hexabaseの個人設定で `開発者向け機能` を有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.am

元記事を表示

Node.jsで無料のタイムスタンプサービスに接続する

## タイムスタンプサービス

無料でタイムスタンプトークンを発行するサービス、[Free TSA Project](http://eswg.jnsa.org/sandbox/freetsa/) に接続します。タイムスタンプリクエスト、タイムスタンプレスポンス、タイムスタンプトークンの出力、解析には[jsrsasign](https://kjur.github.io/jsrsasign/)を使用します。

## jsrsasign のダウンロード

NPMでダウンロードします。

“`
> npm install jsrsasign jsrsasign-util
“`

## タイムスタンププロトコル

タイムスタンプに関わる仕様は、[RFC3161](https://datatracker.ietf.org/doc/html/rfc3161)、[RFC5816](https://datatracker.ietf.org/doc/html/rfc5816) で 定義されています。

HTTP通信で行う際の仕様が [RFC3161 の 3.4 Time-Stamp Protocol

元記事を表示

TechBlog: PreloadResolverという仕組みを作ってGraphQLのN+1問題に対応した話

エクサウィザーズのテックブログでGraphQLでのN+1問題対策についての記事を書きました。

https://techblog.exawizards.com/entry/2022/12/01/154745

元記事を表示

AWS SDK V3 のSQS(Simple Queue Service)で、いくつか動作確認した話(AWS SDK V2 → V3 移行Tips)

# はじめに

https://qiita.com/Syoji_Yonemoto/items/09883e57643583ef39af

引き続いて、今度は、SQS(Simple Queue Service)についても確認しました。
やはり初回(Firehose)の運が悪かっただけで、基本は互換できてそうだという感触になりつつありますが、自分のメモも兼ねてるので確認できた範囲をまとめていきます。

# 結論
SQS(Simple Queue Service)に関しては、私が普段使うメソッド群については、問題ありませんでした。

# V2 と同じ使い方で問題なく動作確認できたメソッド

+ sendMessage
+ receiveMessage
+ deleteMessage
+ getQueueAttributes

# 余談(雑多な感想)
受信・送信・削除・状態確認、一通りLambdaからSQSを活用する際に利用するAPIは試しましたが、V2の時と変わらぬ使い方ができて良かったです。

https://qiita.com/Syoji_Yonemoto/items/e619d

元記事を表示

PrismaでWhere条件を動的かつ型安全に実装する方法

# はじめに
WebAPIの仕様としてリクエスト時に与えられたパラメータに応じて、WHERE句を動的に生成するケース(検索など)はよくあるが、それをPrismaで型安全に実装する方法について。

# 環境
– TypeScript:4.7.4
– Prisma:4.8.0
– Provider:MySQL

# テーブル定義
usersテーブルに名前(name)と年齢(age)がカラム定義されている。
“`schema.prisma
model User {
id Int @id @default(autoincrement()) @db.UnsignedInt
name String
age Int

@@map(“users”)
}
“`

# WebAPIとしての抽出条件の仕様
オプショナルで以下の条件が指定可能なユーザー一覧のWebAPIを想定する。
– 名前(name)に特定の文字列が含まれているか?
– 年齢(age)がn歳以上か?
– 年齢(age)がn歳以下か?

参考実装用の仮想定義だがこのような型のオブジェクトが与えられるイメージ
`

元記事を表示

npm install -g {packageName}は古いと言われた

先日、モブプロで開発作業中にnpm install -gを実行しようとして先輩に「npm install -gはもう古い。[npx](https://www.npmjs.com/package/npx)を使った方がいい」と言われた。

“`
npm install -g {packeageName} # インストールしたらディスク上残る上にインストール後に実行する必要がある

npx {packageName} # インストール、実行、削除、を全部やってくれる
“`

npxは node package executerの略でパッケージの実行ツールらしい。
パッケージを探してインストールして実行、処理が終わればパッケージを消してくれる優れもの。便利だなぁ~

元記事を表示

Json Server役立ちサイトメモ

https://swfz.hatenablog.com/entry/2016/12/06/024342

https://wing-degital.hatenablog.com/entry/2019/05/08/234119

https://www.cyokodog.net/blog/use-well-json-server/

https://deep.tacoskingdom.com/blog/151

https://gist.github.com/juanbrujo/efdcf6ab9eacbd5b5d69884233d0a3ce

https://silurus.dev/articles/4GtXZIAR3mqEduLkgoM1Z2

元記事を表示

Json Serverで認証付きモックを作る

参考サイト備忘録

https://tech-blog.rakus.co.jp/entry/20201029/rest-api

元記事を表示

Json Serverでモックを作る

未実装APIへの通信をテストしたい事がある。
そんな時はJson Serverで未実装APIのモックを作ると吉。
– – –
まず大前提としてnode.jsをインストールする(json serverはnpmのパッケージなので)

:::note info
npmでjson serverをインストールする時にpermission deniedエラーになる事がある。
以下サイトによると、npm公式ではnvm等のnodeバージョンマネージャでnodeを入れて欲しいとの事。
https://zenn.dev/ikeo/articles/8d0c88dcedf256b09f73
少し遠回りになるがnodeバージョンマネージャーを入れてあげると良さそう(著者はnvmを入れた)
:::
:::note info
また、著者はMacで、zshでnpmインストールを行なったが、homeに.zshrcファイルが無かったので、調べた所、以下サイトによりhomeで以下コマンドであらかじめ作っておくモノという事で解決。
https://detail.chiebukuro.yahoo.co.jp/qa/quest

元記事を表示

【Node.js】Slack APIでメッセージを送信する方法

Node.jsでエラー時にSlackにメッセージを送信する実装をしました。

↓こちらの記事の通りに進めさせていただきました。

https://zenn.dev/kou_pg_0131/articles/slack-api-post-message

とても分かりやすかったです。ありがとうございます。
基本的にこの流れで設定できたのですが、少しつまずいた点があったのでメモしておきます。

**(1) [アプリを作成する](https://zenn.dev/kou_pg_0131/articles/slack-api-post-message#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)**
**(2) [スコープを設定する](https://zenn.dev/kou_pg_0131/articles/slack-api-post-message#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%82%92%E8%A8%AD%E5%AE%9A%E3%

元記事を表示

Nodejs + React + MySQL+ Express Todoアプリ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/e5c2b470-4718-34e6-e550-b3034296f198.png)

# 開発環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/5e66bcbd-044b-bcab-dadd-b694cab5382b.png)

# 参考動画

# 使用したパッケージ
### バックエンド
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/53dd671f-bbd5-7611-098a-1477c0a95587.png)

“`terminal:terminal
npm install body-parser cors dotenv expres

元記事を表示

ARでアイスブレイクを in Azure Tech Hackathon

今回は、Azure Tech Hackathonにおいて、自分がチームリーダーを務めた**Team B**の制作物、「FruitsBasket」について紹介いたします!!

# Azure Tech Hackathonについて
顔認証やバーコード読み取りなどの**画像認識**に注目したハッカソンとなっております。IDEACTIVE JAPAN PROJECTの学生アンバサダーチームの運営で開催されました。

https://connpass.com/event/269487/

# FruitsBasketとは
FruitsBasketは、ARを使用したアイスブレイク補助アプリとなります。

![繝上ャ繧ォ繧ス繝ウ_逋コ陦ィ_繝倥z繝シ繧キ繧兩10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698432/a66e8a64-44b5-95f8-6d4c-620b943c7d33.jpeg)
## コンセプト

本アプリのコンセプトは、
「**リアルタイム画像認識で世界を広げる**」です。本アプリによ

元記事を表示

Expoの使い方

# Expoのインストール
講義で使用した環境ツールは2020年ものなので,今時2022年ものに変更しようかと思いましたが,Expo側が対応していなかった・・・

1. Expoのアンインストール
“`sudo npm un -g expo-cli“`
1. [node jsのアンインストール](https://blog.proglus.jp/5518/#i)
1. [今度はHomebreでインストール](https://brew.sh/index_ja)
1. [Homebreで最新のLTS Nodejsをインストールする](https://tech-blog.s-yoshiki.com/entry/254#nodejs%E3%81%AE%E6%A4%9C%E7%B4%A2)
1. expo-cliをインストールしようとするるもNodejsが新しすぎるということでエラー
“`required: { node: ‘>=12 <=16' },``` 1. Nodejsをアンインストールしてnodejsのバージョン16の安定板をダウンロード # プロジェクトの作成 以下コマンド

元記事を表示

TypeScriptでMessagingAPIを介してLINEBotのリッチメニューを設定する方法

# はじめに
TypeScriptを使ってLINEBotの開発をしている中,リッチメニューの更新が[公式リファレンス](https://developers.line.biz/ja/docs/messaging-api/using-rich-menus/)で解説されている方法だとめちゃめんどくさいと思いました.
そのため,実行するだけで一発でリッチメニューの更新をできるようなコードを実装しました.
TypeScriptとして探すとあまり記事がみつからので共有しておこうと思います.

# 環境
– node.js 16.19.0
– line/bot-sdk 7.5.2

# 実装
とりあえず動かしたい人は,下記コードをコピーしてそのファイルを実行すれば動くと思います.その時にConfig.tsの作成を忘れないでください.
解説はコードの後に載せておきます.
“`updateRichMenu.ts
import * as fs from ‘fs’;
import { Client,RichMenu } from ‘@line/bot-sdk’;
import { CHANNEL_ACC

元記事を表示

expressの基礎をまとめる2

こちらの記事の続きを書いていく。

https://qiita.com/ysk-s/items/db9452e4c93e392ea84e

続いて、一意のユーザーidによって表示内容を変更する。

“`
router.get(“/:id”, (req, res) => {
res.send(`${req.params.id}のユーザー情報を取得しました。`);
});
“`

エンドポイントを入力する第1引数にスラッシュ”/”とコロン”:”を打ってからidと入力する。そうすると、それを一意のidとしてページを開いてくれる。
また、そのidはreq.params.idで取得することが出来る。

postメソッドやdeleteメソッドを用いるとid情報の登録や削除などのリクエストを送ることが出来る。
そのためには専用のフォームを用いたり、APIを使用する必要がある。

続いて、res.send()の中でHTMLを表示するやり方を示す。

server.jsの中に”app.use(express.static(“public”));”というコードを加える。
こうすることで、exp

元記事を表示

Dockerとその最も使用されるコマンド

# Dockerは
Dockerは、開発、配信、アプリケーションの実行のためのオープンプラットフォームです。Dockerを使用すると、アプリケーションをインフラストラクチャから分離することができ、ソフトウェアを迅速に提供することができます。Dockerを使用すると、アプリケーションを管理する方法と同じ方法でインフラストラクチャを管理することができます。Dockerのシッピング、テスト、コードを迅速に展開する方法を活用することで、コードを書いて実行するまでの遅延を大幅に短縮することができます。:whale:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/5fcb3de6-4a28-79bd-b44d-34df2873b494.png)

最初に、コンピュータにDockerをインストールする必要があります。これらのコマンドはWindowsまたはMacで動作します(私はMacから作業しますが、Windowsでも実行できます)。

ここに最も使用されるコマンド:

“`
d

元記事を表示

Prisma4にアップグレードした際に$queryRawを使用している箇所でTypeError: Cannot mix BigInt and other types, use explicit conversionsが発生する問題

# はじめに
[以前の記事](https://qiita.com/irohafox/items/2d484bbcbf9a023cb524)でPrisma3系から4系にアップグレードする必要があるケースを書いたが、
その際に発生した問題について。

# 環境
– Prisma(before): 3.13.0(<= 3.15.2) - Prisma(after): 4.8.0(>= 4.0.0)
– Provider:MySQL

# 概要
あるテーブルのレコード件数を`$queryRaw`で取得してレコード件数+1をログに出力する場合、一例ではあるが以下のように書くことができる。
“`ts
const result = await this.prisma.$queryRaw< { count: number }[] >`SELECT COUNT(*) AS count FROM users`
const count = result[0].count

console.log(‘count + 1 =’, count + 1)
“`
仮にusersテーブルに1,000件のレコード

元記事を表示

Fast Node Manager(fnm) チートシート

# 概要
node管理のためにどのパッケージツールを入れているのかわからなくなるのでまとめておく
(fnmのインストール方法に関しては記憶にないのでたまに使うコマンドだけ、、、)

## アジェンダ
1. fnmとは
2. Commnads

### fnmとは
詳しくはこちら↓と公式にぶん投げておく

https://github.com/Schniz/fnm

### Commands

#### バージョンの確認
“`
$ fnm -V
fnm 1.31.0
“`

#### インストール済みバージョンの一覧
“`
$ fnm list
* v14.18.0 default
* v18.13.0
* v19.0.0
* system
“`

#### バージョンの指定
特定のバージョンの場合
“`
$ fnm use {@version}
Using Node {@version}
“`

デフォルトに設定する場合
“`
$ fnm default {@version}
“`

プロジェクト毎にディレクトリ配下のnodeを指定する場合
`.node-version

元記事を表示

【Node.js】Stripeライブラリのlist系のAPIでoffsetが使えないの無理くりどうにかする

## はじめに

[【Node.js】Stripeライブラリの入出力がsnake_caseになっているのをどうにかしたい](https://qiita.com/yuta-katayama-23/items/0cf633f0f81c52f9422c)では、入出力をcamelCaseにできるようにするための独自拡張をやってみた。

今回は、StripeのAPIに`offset`がない事に気づき、SQLに親しんでいる身としては使いにくい(`starting_after`はどちらかというと、NoSQL等で使われるデータの取得を行う際のデータ位置を指定するものになっている)ので、無理くり`offset`を使えるようにする実装をやってみたいと思う。

※以下の実装を見ればわかるが、loopでデータを取得しているだけなので、StripeのAPIの[レート上限](https://stripe.com/docs/rate-limits?locale=ja-JP)に引っかかる可能性が高いので、PoCではいいかもだが、頻繁にlist取得するような実装をするのであれば、今回試しにやってみた実装はNGになると思

元記事を表示

Node.jsの基礎をまとめる2

前回の続きです。ぜひこちらを読んでから御覧ください。

https://qiita.com/ysk-s/items/be9db685d51aac20e179

クライアントから受け取ったリクエストとレスポンスを引数として受け取り、ブラウザへ処理を返す。

最初に”res.writeHead()を追加する。これはリクエストに対してこういうHead情報を返しますよという関数。

第1引数には200を入れる。これは通信がうまくいってますよというステータスコード。
第2引数にはHeadの中身を入れる。今回はそのレスポンスで返すコンテンツの中身はhtmlファイルですよっていう中身を送る。

それが以下のようなコードになる。

“`
//ブラウザからアクセスが来たときの処理
res.writeHead(200, {“Content-Type”: “text/html”});
“`

そして、htmlファイルを読み込ませる。

htmlファイルを読み込ませるにはfsというモジュールが必要になる。
fsモジュールを読み込んでreadFileSync()という関数で非同期処理でind

元記事を表示

OTHERカテゴリの最新記事