- 1. 連番を自動生成し、DB(MySQL)に登録しよう!
- 2. バージョン管理の考え方とNPMとpackage.jsonの役割
- 3. ◆Node.js(Express)のAPIをJestでテストする準備
- 4. JavaScriptで標準入力を扱うには?
- 5. TypeExpressTutorial – 9
- 6. フロントデータ取得の単純な開発環境
- 7. 爆速JS環境Bun入門:5分でNode.jsの4倍速を体験しよう
- 8. Docker上のNode.jsからaxiosでlocalhostへの通信がうまくいかない
- 9. Jestの実行結果をいい感じに出したい!
- 10. pnpm iできない
- 11. 【AWS Lambda】Responseの返し方一覧
- 12. TypeExpressTutorial – 5
- 13. Node-REDのInjectノードのバッファ型、16進数
- 14. SvelteKitでのCSRF対策の実装って結局、必要なの?不要なの?
- 15. Node.jsがヒープ領域不足で落ちてしまったので対処してみた
- 16. Jestの使い方を簡単に調べてみます
- 17. 一度のconnection.queryで、複数のクエリを処理する
- 18. nodenvでよく使うコマンド一覧
- 19. マウントしているNASのファイルがfs.rename出来なくなる問題
- 20. 1つのルートで複数のクエリを順番に処理する方法
連番を自動生成し、DB(MySQL)に登録しよう!
# はじめに
今回は下記メンバーをサイト画面(test.ejs)からDB(MySQL)に登録する際、
IDを連番(1002、1003・・・)で自動生成する方法についてお伝えします。|ID |姓 |名 |クラス |
|——–|——–|——–|——–|
|1001 |キム |ウソク |A |
| |キム |シフン |A |
| |ナム |ドヒョン |D |
| |カン |ヒョンス |A |![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726548/6d8ea2a4-a836-7d4b-eb3b-c0306e9fa306.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726548/
バージョン管理の考え方とNPMとpackage.jsonの役割
## はじめに
**Node.js**を学び始めました。**npm** に初めて触れるときは、**package.json** がどういう役割をもっているのか、パッケージをインポートするとはどういうことなのか、概要をつかむのが大変だと思います。**Node.js**プロジェクトの設定ファイルである**package.json**で、プロジェクトのメタデータ、依存関係、スクリプト、バージョン情報などを定義がどのようなものであるのか、整理したかったので、内容をまとめてみました。
:::note info
**NPMは、Node.js用のJavaScriptパッケージを管理するためのツールです。**
**package.jsonは、Node.jsプロジェクトに関する情報を記述するJSON形式のファイルです。**NPMとpackage.jsonは、密接に連携して動作します。NPMは、package.jsonに記述された情報に基づいて、パッケージのインストールやスクリプトの実行を行います。一方、package.jsonは、NPMコマンドで生成したり、手動で編集したりすることができます。
◆Node.js(Express)のAPIをJestでテストする準備
## **導入方法**
必要なパッケージのインストール
“`tsx
npm install –save-dev jest ts-jest @types/jest @types/supertest
“`初期化
“`tsx
npx ts-jest config:init
“`“`jsx
The following questions will help Jest to create a suitable configuration for your project√ Would you like to use Typescript for the configuration file? … yes
√ Choose the test environment that will be used for testing » node
√ Do you want Jest to add coverage reports? … yes
√ Which provider should be used to instrument code for coverage
JavaScriptで標準入力を扱うには?
## はじめに
JavaScriptで初めて競技プログラミングに挑戦したのですが、標準入力の値を取得するところで早速つまずきました。
サンプルコードがあったので試行錯誤して解決することはできましたが、
それぞれの処理の意味がよくわからなかったので、調べたことを備忘録として残しておきます。## 標準入力・標準出力とは
### 標準入力
> 標準入力(standard input)とは、コンピュータ上で実行されているプログラムが、特に何も指定されていない場合に標準的に利用するデータ入力元。システム上では “stdin” の略号で表されることが多い。(引用元) [標準入力(stdin)とは – 意味をわかりやすく – IT用語辞典 e-Words](https://e-words.jp/w/標準入力.html “標準入力(stdin)とは – 意味をわかりやすく – IT用語辞典 e-Words”)
### 標準出力
> 標準出力(standard output)とは、コンピュータ上で実行されているプログラムが、特に何も指定されていない場合に標準的に利用するデータ出力先。システム上
TypeExpressTutorial – 9
:::note info
やりたいこと
– `GET api/auth/me` にリクエストをするとユーザー情報が返却されるようにする
– 認可を制御する処理をミドルウェアとして設置する
– Express.js の Request の型定義を上書きしてアプリ全体で使えるようにする
:::全体像
1. [プロジェクトを作成する](https://qiita.com/yk-graph/items/b5f0551cb368fb86c50c)
1. [Mysql + prisma でDBを構築する](https://qiita.com/yk-graph/items/02333bd99b625dbcc49d)
1. [環境変数を設定する](https://qiita.com/yk-graph/items/e37cd011c6da3feb93d2)
1. [APIを作成する](https://qiita.com/yk-graph/items/e5b52a4d35cd43d95f7a)
1. [ユーザー登録とログインを実装する](htt
フロントデータ取得の単純な開発環境
## はじめに
フロントデータとして位置情報を取得します。
位置情報を取得し、サーバでその情報を取得する所を行います。
まず開発環境で試します。## 構成
ローカル環境でAPIサーバーとフロントエンドを連携させて動作確認をします。– APIサーバをnodeで作ります。
– フロントをセットします。
– HTTPサーバを立ち上げます。### ステップ1: ローカルAPIサーバーのセットアップ
node.jsでサーバとしてセットするために以下のライブラリーが必要になります。
– **`express`**: Node.jsのためのWebアプリケーションフレームワーク。ルーティングやミドルウェアの管理が簡単に行えます。
– **`body-parser`**: Express用のミドルウェアで、リクエストボディのデータを解析して扱いやすくします。
– **`cors`**:Express用のミドルウェアで、異なるオリジンからのHTTPリクエストを許可するためのCORS設定を簡単に追加できます。#### 1. プロジェクトディレクトリの作成
“`sh
mkdir local-
爆速JS環境Bun入門:5分でNode.jsの4倍速を体験しよう
Bunは、JavaScriptの実行とパッケージ管理を高速化するランタイムです。Nodeを置き換える可能性を秘めています。
「本当に必要なの?」
そう思った方、ちょっと待ってください。Bunは単なる新顔ではありません。Nodeの4倍以上の速度[^1]で動作し、TypeScriptやJSXをネイティブサポートする、まさに「爆速」な開発環境なのです。
[^1]: Bunの公式ベンチマークによる。実際のパフォーマンスは環境やタスクによって異なる場合があります。
本記事では、Bunのセットアップからhello-worldまでを5分で体験できる方法をご紹介します。Nodeをご存知の方はもちろん、「bunってなんぞや?」と思っている方に読んでいただきたい内容です。
## 1分でできるBunのセットアップ
Bunのインストールはとても簡単です。ターミナルを開いて、以下のコマンドをコピー&ペーストするだけ。
### macOS, Linux
“`bash
curl -fsSL https://bun.sh/install | bash
“`### windows
“`sh
Docker上のNode.jsからaxiosでlocalhostへの通信がうまくいかない
# 状況
axiosを使ってAPI通信を試したくて、docker上にlaravelのAPIサーバーを立ち上げてnode.jsの対話モードからaxiosで通信を試したところエラーが返ってきました。### Laravel
route/api.phpの中身は以下
`http://localhost/api/test`に接続すると` { id: 1, name: ‘test’ }`のJSONを返す単純なAPIです。“`PHP:route/api.php
json([
‘id’ => 1,
‘name’=> ‘test’,
]);
});
“`
Laravelと同じコ
Jestの実行結果をいい感じに出したい!
# はじめに
皆さんは[Jest](https://jestjs.io/ja/)**の実行結果の表示をいい感じに出したい**!と思ったことはありませんか?
デフォルトだと下記のような感じで結果を見せてくれますが、これだと自分が見る分には十分なんだけどちょっと無骨な印象もあります。
“`shell
# ここら辺にテストファイルのパスと結果Test Suites: 9 passed, 9 total
Tests: 119 passed, 119 total
Snapshots: 0 total
Time: 2.466 s, estimated 12 s
Ran all test suites matching /date/i.
“`後はテストを通っているならともかく、エラーが多いとかなり見にくくなってしまいます。~~そもそもエラー出すな~~
後から結果を見返す時とか、プログラマじゃない人にもこんな感じでテストしてますよ~って見せる時を考えるとやっぱり何とかしたいです。
何より綺麗にテスト結果が見えたら良い気分になりますよね!ここまでで「いや別
pnpm iできない
## 問題
`pnpm i`をすると、以下のようにエラーが出ました。
“`shell
ERROR: This version of pnpm requires at least Node.js v18.12
The current version of Node.js is v16.14.2
Visit https://r.pnpm.io/comp to see the list of past pnpm versions with respective Node.js version support.
“`そこで、nodeのバージョンを確かめると、nodeとNodeのバージョンが違うという謎現象が起きていました。
“`zsh
(base) hirune (*・∀-)b functions % node –version
v20.11.0
(base) hirune (*・∀-)b functions % Node –version
v16.14.2
“`## 解決
~/.zshrcの中に以下を書き足すと、成功しました🎉
“`zsh
export VOLTA_FE
【AWS Lambda】Responseの返し方一覧
※Node.jsのSyntax、Naming Conventionで記載します。
1. Return(シンプルで読みやすく、分かりやすいので推奨)
シンプルに`return`で呼び元に値を返します。
処理をキャンセルする場合は、`throw new Error()`を使います。
非同期処理の場合も、`async/await`を使い、`return`や`throw new Error()`で処理を続行、キャンセルする方法が[推奨](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html#nodejs-handler-async)されています。
“`javascript:index.mjs
export const handler = async (event, context, callback) => {
if(event.request.something === ‘error value’) throw new Error(‘Error’)
TypeExpressTutorial – 5
:::note info
やりたいこと
– `/api/auth/signup` `POST` リクエストをして、新規でユーザーが作成する
– `/api/auth/login` `POST` リクエストして、ログインに成功した場合はユーザー情報とJWTのトークンを返却する
:::## Routesの設定
“`src/routes/auth.ts
import { Router } from ‘express’import { login, signup } from ‘../controllers/auth’
const authRouter: Router = Router()
authRouter.post(‘/signup’, signup) // POSTリクエストにするため、 .post に変更
authRouter.post(‘/login’, login) // POSTリクエストにするため、 .post に変更export default authRouter
“`## Controller の処理
“`src/controllers/aut
Node-REDのInjectノードのバッファ型、16進数
## フロー
![flow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301191/8a127c12-2eae-9bf1-0449-ba337dcccafb.jpeg)
### フローでやっている事
#### Injectノード
msg.payloadプロパティのバッファ型に、16進数で`[“0x10″,”0x20”]`を設定。![editEnject.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301191/64c84b7b-819f-0d80-69c6-824dd8027f21.jpeg)
※msg.payloadはBufferクラスのオブジェクトになる。#### Functionノード
Bufferオブジェクトの0番目を取得。![editFunction.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330
SvelteKitでのCSRF対策の実装って結局、必要なの?不要なの?
## はじめに
昔からある攻撃の1つであるCSRFだが、SvelteKitでは対応不要というのを見かけた。
https://github.com/sveltejs/kit/issues/72#issuecomment-927143506
ほんとに?というのをソースコードを見て安心したいと思ったので、今回はソースコードでどのように実装されているか?を見てみたいと思う。
そしてソースコードを見ていく中で、[server route](https://kit.svelte.dev/docs/routing#server)による`’Content-Type’: ‘application/json’`を受け入れるエンドポイントを実装した場合は、自分でCSRFの対策をする必要があるように思えたので、それについてもまとめてみたいと思う。
## CSRFの対策を実装している部分の実装を見てみる
ずばり以下の部分。
https://github.com/sveltejs/kit/blob/%40sveltejs/package%402.3.2/packages/kit/src/runtim
Node.jsがヒープ領域不足で落ちてしまったので対処してみた
ある時、このようなログが発生してNode.jsが頻繁に落ちるようになりました。
“`
FATAL ERROR: Reached heap limit Allocation failed – JavaScript heap out of memory
“`↓前後のログ
![4186e71daa6a1d7dbcd1acf644873fb0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243199/46cb1efc-fe70-c651-fe0f-91b93a00d50f.png)エラーログを読むと、Node.jsのヒープ内領域が足りていないと書いてありました。
調べてみると、`–max-old-space-size`の値をデフォルトより大きくするといいとの情報が出てきました。
設定はNode.jsの起動コマンドに`–max-old-space-size=値`を付与するか、環境変数に下記の通り指定すると設定が可能です。
“`
export NODE_OPTIONS=”–max-ol
Jestの使い方を簡単に調べてみます
# Intro
Jestが登場する以前は、JavaScriptのコードをテストするために、複数のテストライブラリを組み合わせて使用する必要がありました。例えば、Mocha + Expect + Sinonといったライブラリを使ってテストを行ったり、テストカバレッジを測定するためにIstanbulというライブラリを使用したりしていました。わぁ…聞くだけで、テストのために使用するライブラリが非常に多いことがわかります。しかし、Jestが登場してからは、Test Runner、Matcher、Mocking、Coverage測定まで、すべてを提供してくれるため非常に便利になりました。
通常、テストライブラリは開発依存としてインストールします。
“` bash
$ npm i -D jest
“`“` json
{
“name”: “jesttest”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “jest”
},
“
一度のconnection.queryで、複数のクエリを処理する
## 一度に複数のMySQLクエリを投げたい
入力されたユーザーID(`user_id`)、グループID(`group_id`)の値を使って、
* `users`テーブルから`id=user_id`を条件に`name`を検索
* `groups`テーブルから`groupId=group_id`を条件に`groupName`を検索これらの検索を一度のconnection.queryで処理して、得られた`results`の内容を`res.render(‘test.ejs’)`に反映させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3825151/214f8531-8ac7-dab6-9082-f110c59c2efe.png)
2つの検索処理を行う順番に特に制限はないが、webページの描画時(アクション終了時)にはどちらの結果も代入できる状態でなければならない。
つまり、**2つの検索結果を1つのアクションの中で手に入れる**必要がある。
My
nodenvでよく使うコマンド一覧
### nodenvでインストールが可能なNode.jsのバージョン一覧を出力
“`bash
nodenv install -l
“`### 指定したnode.jsのバージョンを新規インストール
“`bash
nodenv install 18.19.1
“`### 既にインストールされているNode.jsのバージョン一覧を出力
“`bash
nodenv versions
“`### 現在のディレクトリで利用するNode.jsのバージョンを設定
“`
nodenv local 18.19.1
“`### グローバルで利用するNode.jsのバージョンを設定
“`
nodenv global 18.19.1
“`
マウントしているNASのファイルがfs.rename出来なくなる問題
# マウントしているNASのファイルがfs.rename出来なくなる問題
久しぶりにハマったので同じようにハマってる人の参考になればと思い記録も兼ねて書いていこうと思います。
こういう記事書くのは慣れていないので見にくいと思いますがお許しください。## 環境
サーバーOS: CentOS Linux release 7.9.2009 (Core)
サーバープログラム: node.js v16.18.0
fsモジュール:0.0.2## 発生状況
自社用の業務管理のスマホアプリを開発していて、案件毎にスマホで写真を保存したり削除したり出来るようにしていたのですが、他のデスクトップアプリやWindowsのエクスプローラーからも写真を追加したり消したりする為に写真の保存先をNASにすることにしました。社内LINUXサーバーでNASを利用するために/etc/fstabに
“` bash
\\192.168.0.50\pictures /mnt/nasPictures cifs cifsacl,_netdev,noperm,vers=1.0,user=@@@@,pass=@@@@
1つのルートで複数のクエリを順番に処理する方法
### MySQLにクエリを連投できない
フォームに入力された新規ユーザーを`users`テーブルに追加する際、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3825151/801e1977-a645-4774-bcb6-1829d6ca23c7.png)
1. 登録したい`req.body.userName`の値が既存どうかをチェック
1. 登録済みでなければ新規登録するこれら2つのアクションを1つのルートの中で順番に処理する必要がある。しかしひとつのアクション内でMySQLへクエリを投げられるのは一度だけのようで、以下のようなコードはエラーになってしまう。
“`javascript
app.post(‘/adduser’, (req, res) => {
////重複チェック action1
connection.query(`
SELECT * FROM users WHERE name=?`,
[req.body