- 1. TypeExpressTutorial – 4
- 2. Node-REDのInjectノードのバッファ型、16進数
- 3. SvelteKitでのCSRF対策の実装って結局、必要なの?不要なの?
- 4. Node.jsがヒープ領域不足で落ちてしまったので対処してみた
- 5. Jestの使い方を簡単に調べてみます
- 6. 一度のconnection.queryで、複数のクエリを処理する
- 7. nodenvでよく使うコマンド一覧
- 8. マウントしているNASのファイルがfs.rename出来なくなる問題
- 9. 1つのルートで複数のクエリを順番に処理する方法
- 10. TiDBのseverless driver向けのエミュレーターとしてServerless MySQL HTTP(SMH)を作った話
- 11. curlの証明書エラーを回避してVoltaをインストールする
- 12. 【Node.js】Lambdaから社内環境のSQL Serverに接続する方法
- 13. fnm useコマンドで「error: We can’t find the necessary environment variables to replace the Node version.」が出るときの対処法
- 14. 04_構築のために公式ドキュメントを見た
- 15. AVAでswc-nodeを使ってTypeScriptで書かれたテストを実行するための設定
- 16. バーコード画像を解読するWebアプリケーション
- 17. 03_Material UIの構築ができた
- 18. Node.jdバージョン管理
- 19. [Serverless Framework] Middy Router
- 20. json→csv への変換ライブラリ csv-stringify
TypeExpressTutorial – 4
## GOAL
– `/api/auth/signup` に `GET` でリクエストされたら任意のJSONが返却されるAPIが出来ていること
– `/api/auth/login` に `GET` でリクエストされたら任意のJSONが返却されるAPIが出来ていること## 実装
### Controller
`src/controllers/auth.ts` ファイルを新規で作成して記述する
1. リクエストを routes層 で受け取る
1. routes層 で実際の処理の関数をコールする
1. 処理の関数は controller層 で記述する
1. 下記では、signup関数, login関数 がコールされたら任意の JSON を返却するだけの関数を記述している“`src/controllers/auth.ts
import { Request, Response } from ‘express’export const signup = async (req: Request, res: Response) => {
res.json({ message: ‘S
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
TiDBのseverless driver向けのエミュレーターとしてServerless MySQL HTTP(SMH)を作った話
## はじめに
[TiDB](https://docs.pingcap.com/)というMySQL互換のサービスがあり、それを[serverless driver](https://docs.pingcap.com/tidbcloud/serverless-driver)で利用してみることにした。しかしTiDBには、AWSの[LocalStack](https://www.localstack.cloud/)やFirebaseの[Firebase Local Emulator Suite](https://firebase.google.com/docs/emulator-suite)のような、いわゆるローカルの開発環境におけるserverless driver向けのエミュレートサービスがないみたいだった。
そこで、ないなら作ろう!という事で、今回Serverless MySQL HTTP(SMH)を作ってみたので、それについて取り上げたいと思う。
https://github.com/yutak23/serverless-mysql-http
※TiDBのserverless
curlの証明書エラーを回避してVoltaをインストールする
Voltaをインストールする際にcurlの証明書エラーでハマったので回避方法をメモしておく。
# [公式](https://docs.volta.sh/guide/getting-started)のコマンド
`curl https://get.volta.sh | bash`# 証明書エラー回避コマンド
`curl -k https://get.volta.sh | sed ‘s/curl –/curl -k –/g’ | bash`### コマンドの説明
一般的にcurlコマンドで証明書エラーを回避するには`-k` or `–insecure`オプションを付ける。公式のシェルスクリプト`https://get.volta.sh`は内部でもcurlコマンドが使用されており、単純に`-k`オプションを付けるだけではうまくいかない。
そのため、`sed`コマンドでシェルスクリプト内のcurlコマンドにも`-k`オプションを差し込んで実行している。
【Node.js】Lambdaから社内環境のSQL Serverに接続する方法
## はじめに
AWS Lambdaから社内環境のSQL Serverへの接続方法について紹介していきます:point_up_tone1:
SQLServerへの接続部分で具体的な値の例が無く、苦戦したのでより具体的に値を記載しようと思います!## 開発内容
### パッケージのインストール
Node.jsでSQLServerへアクセスするために必要なパッケージをインストールします“`
npm install mssql
“`
https://github.com/tediousjs/node-mssql### Lambdaの設定
特定の環境からのみアクセス可とするため、VPCの設定を行います。
Lambdaの設定タブのVPC からVPC、サブネット、セキュリティグループを設定します。### ソースコード
“`javascript
// パッケージの読み込み
const sql = require(‘mssql’)// SQL Serverの設定
const config = {
user: ‘sa’,
password: ‘XXXXXXX’, //
fnm useコマンドで「error: We can’t find the necessary environment variables to replace the Node version.」が出るときの対処法
## 概要
https://nodejs.org/en/download/package-manager
Node.jsの公式のインストール手順で「fnm use」を実行したときに
> error: We can’t find the necessary environment variables to replace the Node version.
のエラーが出た時の対処法。
## 解決法
https://stackoverflow.com/questions/78606679/unable-to-install-and-use-nodejs-using-fnm
他にもいろいろ提案されている対応策があったが、ここに書いてあることをやれば治った。
`fnm use` コマンドの前に以下のenvの設定を実行する。
`> fnm env –use-on-cd | Out-String | Invoke-Expression`
その後、 `fnm use` 以降を実行することでうまくいく。
04_構築のために公式ドキュメントを見た
# 前回の話
https://qiita.com/ersia/items/e2f1e3beecd331548727
Material UIの構築ができるように。
という喜びもつかの間、脆弱性だゾ~って何かが赤く光ってました。
ということで、昨日の手順だと脆弱性に関するエラーが出るので改めてドキュメントを見ていくことに## Material UI Introduction
https://mui.com/material-ui/getting-started/
>Material UI is an open-source React component library that implements Google’s Material Design.
→Reactの構築が必要。
## React再構築 – create-next-app
https://ja.react.dev/learn/start-a-new-react-project
`npx create-next-app@latest`
project named – > gtasktool
typesc
AVAでswc-nodeを使ってTypeScriptで書かれたテストを実行するための設定
## SWC, swc-nodeとは
[SWC](https://swc.rs/)はRustで実装された高速なTypeScript/JavaScriptのトランスパイラで、BabelのようにTypeScript/JavaScriptのファイルを入力して、そこから様々な環境で動くJavaScriptファイルを生成することができます。
設定を行うことで、以下のようにtsconfig.jsonの`paths`の設定を利用したインポートを、相対パスでの`import`/`require`に書き換えてくれる機能が標準で備わっている点を特に個人的に便利だと感じています。[^1]
[^1]: `paths`を利用したインポートはJavaScriptを実行するツールや環境によって認識されたりされなかったりするのでありがたいです。
“`ts:src/hoge/fuga/piyo.ts
import { hogera } from “@/moge/hogera”;
“`↓ トランスパイルされたJSファイル
“`js:dist/hoge/fuga/piyo.js
“use strict”
バーコード画像を解読するWebアプリケーション
### 目的
Webページ上に``で表示した画像に含まれたバーコードを解読し、その値を文字列として表示します。こんな感じです。
処理には、画像処理ライブラリの定番[OpenCV](https://opencv.org/)を使います。JavaScript版なので、OpenCV.jsと呼ばれます。
+
JavaScriptなので、`