Node.js関連のことを調べてみた2022年11月24日

Node.js関連のことを調べてみた2022年11月24日

readStreamでストリームをクローズしないようにしたい(Node.js)

# 問題
ある日,高頻度(10ms間隔)で更新されるCSVファイルを読んで更新内容を取得したいという事がありました.
これはreadStreamとreadlineで行けるのではと思ってやると,ファイルの末尾まで読んだ瞬間にストリームがクローズしてそれ以降追記されるデータが読み込めなくなってしまいました.
そこで,fs.watchして変更検知した瞬間に再度ストリームを開いて更新内容を取得すればいいのではと思ったのですが,これはストリームをオープンするコストが高く,全く使い物になりませんでした(streamをオープンしている間にデータが追記されてfs.watchのイベントが次々と発火され処理が間に合わない).

# やること
– ファイルの末尾まで読んでもファイルをオープンしたままにする.
– ファイルが更新された時に低コストで更新内容を読む.

# 設計?
1. node.jsのfsでファイルをオープンしてEOFまで読み取る.
 - 読み取ったEOFの位置を記録しておく.
2. fs.watchでファイル変更を検知した時に前回のEOFの位置からまた次のEOFまで内容を読む.
 - 再

元記事を表示

node.jsでファイル移動する方法

node.jsでファイル移動する方法について調べたのですが、あまり良い情報がなかったので記事にします。

よく出てくるのが、`fs.renameSync`を使う方法
“` javascript
import fs from “fs”;

fs.renameSync(‘/home/hello.txt’, ‘/tmp/world.txt’);
“`
renameというメソッド名にもかかわらずファイル移動も出来ちゃうのですが、弱点があってLinuxだとパーティションを跨ぐとエラーになります。Windowsだとドライブを跨ぐと下記のようなエラーになります。
“`
Error: EXDEV: cross-device link not permitted
“`

node.jsの公式サイトの説明
https://nodejs.org/docs/latest/api/fs.html#fsrenamesyncoldpath-newpath

解決策としては、パーティションやドライブを跨ぐ移動をしたときは下記のようなメソッドを作成すると良さそうです。
“` javascript
import

元記事を表示

FormDataでファイル名に日本語が含まれるファイルをPOSTすると文字化けした

? 初投稿です。
まだまだ未熟者ですので、温かい目で見ていただけると幸いです。

## やりたいこと
家庭用GooglePhotoのようなものを製作したい。
フロントはreactで製作し、Material UIを活用しUI周りを整える。
バックはexpressで製作し、multerで画像を保存する。

フロントからバックへの画像送信はaxiosを用いてPOSTする。

## 状況
題の通り、inputで選択したファイルの名前に日本語を含む場合、バック側で受け取った際にファイル名が文字化けする。

“`js:フロント
// フォームデータに画像追加
const data = new FormData()
images.map((image) => {
data.append(‘images’,image)
})

// 送信
await axios.post(
url,
data,
{
headers: {
‘Content-Type’: ‘multipart/form-data’,

元記事を表示

Satoruyaで敢えて採用しなかったライブラリ

2022年現在、SatoruyaというSNSをβテストという形で公開しています。

https://www.satoruya.com/

前に「枯れた技術の水平思考」で使うライブラリ(フレームワーク)を選定した、と記事にしました。

https://qiita.com/__satoruya/items/0a3721b5c70750d2f81f

今回はこのSatoruyaで使わなかったライブラリを紹介していきます。

# Railsを始めとするMVCフレームワーク

今回のSatoruyaの開発ではMVCフレームワークを使いませんでした。
Railsは・・・まぁ、嫌な言い方ですが、時代遅れという理由ですね。とっくに枯れた技術を通りこして悪い意味でレガシーになっています。
DjangoはPythonの豊富なライブラリが使えるというのもあり、まだまだ十分人気ですが日本語の資料が少なく、情けない話なのですが、英語のサイトを利用してまで使う必要があるのかと思って使いませんでした。
(Node.jsの方が日本語の資料は少ないだろと突っ込まれたら一切否定できませんが)
速度的にもNode.jsの方

元記事を表示

Voltaで特定バージョンのNode.jsをUninstallしたい

# はじめに

[Volta公式のUninstallコマンドに関するリファレンス](https://docs.volta.sh/reference/uninstall)には、packageのUninstallについては言及があるものの、Node自体については特にナシ
Nodeバージョンを増やしすぎて、`volta list all`した時にわんさか出てくるのも嫌なので、削除方法をメモ

2019年3月にはIssueが発行されているが、まだVoltaビルトインの機能としては対応されていないみたい
[Support volta uninstall for node and yarn #327](https://github.com/volta-cli/volta/issues/327)

# 方法

以下パスにあるバージョン番号のディレクトリを削除

– Mac – `~/.volta/tools/image/node/`
– Win – `%LOCALAPPDATA%\Volta\tools\image\node\`

`rm -rf ~/.volta/tools/image/node/

元記事を表示

[Node.js] TypeScriptコードの変更を検知し再起動する方法

# はじめに

TypeScriptを使ってアプリケーション開発をしている時、以下のことに煩雑さを覚えたので解決方法をメモ

1. TypeScript→JavaScriptにトランスパイル
1. サーバを起動
1. コードを修正
1. サーバを止める
1. TypeScript→JavaScriptにトランスパイル
1. サーバを起動

`cosole.log()`を一個増やしたいなって思うだけでもこれだけの手順を踏まないといけないのは効率が悪すぎる

# `ts-node-dev`を使用する

公式はこちら

https://www.npmjs.com/package/ts-node-dev

## インストール

`npm i ts-node-dev –save-dev`
`yarn add ts-node-dev –dev`

## 使い方

`ts-node-dev [node-dev|ts-node flags] [ts-node-dev flags] [node cli flags] [–] [script] [script arguments]`

サンプル
`t

元記事を表示

【環境構築】DockerでNode.js環境を構築する

# はじめに
DockerでNode.js環境を構築します。

Node.JSが動くのみで、パッケージなど何もインストールしていないまっさらな状態を構築します。

## 前提
ローカルPCにDockerがインストールされていることを前提とします。

まだインストールしていない方は[こちら](https://www.docker.com/products/docker-desktop/)からインストールしてください。

ちなみに筆者のDockerバージョンは20.10です。

## 手順

まずは作業ディレクトリと`Dockerfile`と`docker-compose.yml`の作成です。

“` bash
mkdir docker-node
cd docker-node
touch Dockerfile
touch docker-compose.yml
“`

次にDockerfileは下記のようの記述してください。

“` Dockerfile
FROM node:18.7-alpine
WORKDIR /app
“`

違うNodeバージョンにしたい場合は[DockerH

元記事を表示

GridDBを用いた中古車販売に影響を与える要因の分析

隣接する多くの産業にまたがる[自動車産業][1]は、世界経済の柱であり、マクロ経済の成長と安定、そして先進国と発展途上国の技術進歩に大きく貢献しています。

世界の自動車産業は活況を呈しており、新しい変化をもたらすために、新しい電気自動車の生産に目を向けています。しかし、ここでは新しい発明や自動車についてではなく、化石燃料を使用した中古車市場に対してどのような要因が影響を及ぼしているのかを考察してみたいと思います。

GridDBは、拡張性と最適化に優れたインメモリNoSQLデータベースで、特に時系列データベースにおいて並列処理による性能向上と効率化が可能なため、中古車販売に影響を与える要因の分析に使用します。GridDBのNode.jpクライアントを利用することで、GridDBとNode.jsを接続し、リアルタイムにデータのインポートやエクスポートを行うことが可能です。さらに、Danfo.JSライブラリを使用して、データ分析用のデータフレームを操作し、興味深いビジュアライゼーションやデータの発見を実現します。

csv形式のデータセットは[Kaggle][2]から入手したものです。こ

元記事を表示

GridDBを用いた全世界のメタンガス排出量の解析

メタンは無色・無臭の気体で、自然界に多く存在し、人間の特定の活動によって生成されることもあります。メタンはパラフィン系炭化水素の中で最も単純な物質であり、温室効果ガスの中で最も強力なガスの一つで、化学式は[CH4][1]です。

メタンは温室効果ガスであるため、地球の気温や気候に影響を与えます。メタンの排出源は、自然起源と人為起源の2種類に分類されます。人為的な排出源としては、埋立地、石油・天然ガスシステム、工業プロセス、石炭採掘、定置・移動燃焼、廃水処理、農業活動などが挙げられます。自然発生源としては、湿地における植物体の分解、地下埋蔵物からのガスの浸透、家畜による食物の消化など、有機物の分解や腐敗が挙げられます。

[全ソースコードとデータセットはこちら][2]

以上、メタンガスとその原因について理解したところで、今度は解析のために、GridDBを使って大量のデータセットを読み込み、保存し、アクセスすることにしましょう。

## GridDBを使ったデータセットのエクスポートとインポート

GridDBは、高いスケーラビリティと最適化を実現したインメモリNoSQLデータベースで、

元記事を表示

【M1 Mac】npm start できなかった時の対処記録

# 状況
普段使っているWindows環境でいつも通り
`Create Reactapp!`
(この段階では普通に起動できる)

GitHub経由でファイルを移して
掘り起こしたMacにHomebrew・node.jsをインストールしてターミナルで
`npm start..` あれ?
`sh: react-scripts: command not found`
binファイルを確認してもNode.jsはしっかりインストールされているし…

という状況に陥ったので、同じ状況に陥った仲間のために本記事を投稿します。
※筆者は酷く初心者なため稚拙な内容をお許し下さい。

# 原因
色々調べてみると M1 macにてパッケージマネージャのHomebrewが上手くインストールできないという記事を発見。

https://qiita.com/___fff_/items/17655df4e80ebadd8fc3

# Homebrewの再インストール
上記の記事を参照してターミナルをRosettaを使用して開くにチェックを入れ、下記のコードをターミナルにコピしてHomebrewを再インストール。

元記事を表示

『シバコロ』アカウントが強化されました!Node-REDでTwitterへ自動投稿

# どうもこんにちは。『シバコロ』の者です。
芝生が好きすぎるので、誰もが簡単に良質な芝生に出会うためのアプリを運営しています。
Glideを使ってアプリのモックを作成した記事はこちらです。

https://qiita.com/atoms50/items/f91b9a8b53875a7c82f6

# Twitterアカウントもやっています
『シバコロ』はアプリの提供と同時に、Twitterアカウントでの活動を行っています。
こちらのアカウントでは、僕が訪れた芝生のレポートや、シバコロに登録された芝生情報を発信しています。

# シバコロのアカウントを強化したい
アプリに登録された芝生情報は、なるはやでみなさんに共有したいものです。
とはいえ、これが結構大変です。現状のシバコロには新規登録された際に通知を出す機能がないので、アナログにデータベースを覗きにいくしかないのです。

なので、僕はいつも定期的にア

元記事を表示

WebStormがArch Linux環境下のNodeを見つけてくれない問題

# 環境

OS: Arch Linux
Kernel: 5.15.74.2-microsoft-standard-WSL2
WebStorm: `2022.2.3` (2022/11/22現在のLTS) & `2022.3 RC` (次期バージョンのリリース候補)

# 何が起きたのか

本来自動的に指定されるNode InterpreterをWebStormが見つけることが出来ず、WebStorm上からNode.jsの機能が利用できない

—-

公式のドキュメントには次のような記載がある

https://www.jetbrains.com/help/webstorm/developing-node-js-applications.html

> Click the Browse button next to the Node Interpreter field, in the Node.js Interpreters dialog that opens, click the Add button, and then select Add WSL from the list.

元記事を表示

Github の Readme に Coverage badge を付ける

# 目的

* github の ReadMe に coverage badge を表示したい

# 前提

* `Node.js`の環境構築済み
* `Git`と`Github`の環境構築済み

https://qiita.com/ryo2020/items/136f1352aca97ddb026b

https://qiita.com/ryo2020/items/8bcae7d3993981c43068

# 環境

* Windows – v11
* Node.js – v16
* nyc – v15
* mocha – v10
* chai – v4
* Coveralls – v3
* Github Actions

# 結論

こうする。

“`json:package.json
}
“scripts”: {
“pretest”: “rm -rf .nyc_output”,
“test”: “nyc mocha -R spec”,
“precoverage-report”: “rm -rf coverage && mkdir coverage”

元記事を表示

[Javascript] File System fs.readFileSync() でfile not foundになった話

“`
function htmlfile_read(path){
const fs = require(“fs”);
var str = fs.readFileSync(path,”utf-8″);
return str;
}
“`
fileを読み込んで出力するだけの関数を作ろうと思ったんだけど、path = “./index.html”にすると、このエラーが出る

“`
htmlfile_read(“ENOENT: no such file or directory, open ‘./index.html’
“`

### path構成
project名
L index.html
L index.js <-ここから読もうとしてる ### 解決策 path = "project名"/index.html にしたら治った ### 確認したこと #### pathの有効性を確認 1. path.jsの作成 project名 L index.html L index.js <-ここから読もうとしてる L path.js 2. path.j

元記事を表示

npmとコマンドについて

# npmとは
Node Packaged Managerの略字。
node.jsで作られたpakageを管理するツールのこと。
開発者はnpmを利用してnode.jsで作られたpackageをインストールすることができる。

# npm の利用方法
### npmのインストール
[node.js](https://nodejs.org/ja/)サイトにて簡単にインストールすることができる。

### packageのインストール
以下のコマンドでweb上のpackageをインストールすることができる。
“`shell
npm install webpack
“`

### package.jsonの生成
以下のコマンドをターミナルで入力するとpackage.jsonを生成することができる。
正確には、npmを使うための初期設定をするコマンド。
“`shell
npm init
“`
コマンドを入力すると、いろいろ聞かれるが、そのまま`enter`を押して進むと作成が完了する。

package.jsonについては、以下の記事をご参考に…
[npm i とnpm ci の違

元記事を表示

今後NeDBを使うのはやめよう

既にメンテナンスされていません。セキュリティ対応もされません。

https://github.com/louischatriot/nedb

> ⚠️ ⚠️ ⚠️ WARNING: this library is no longer maintained, and may have bugs and security issues. Feel free to fork but no pull request or security alert will be answered.

非バイナリ依存でデータはファイル保存、そしてファイルはテキスト形式なので容易に閲覧することができる、と、SQLiteではかゆいところに手が届かなかったのがNeDBなら届く。素晴らしいNoSQLデータベースであっただけに、非常に残念です。

教材向けで使いやすいNoSQLデータベース無いですかね。

元記事を表示

nodejs mysql 複数クエリ (multiple query) を使う方法

# Code
`nodejs` + `mysql` で複数クエリを使用しようとしたところ、エラーが発生して解決するのに時間がかかった。
方法は単純で`multipleStatements: true`をちゃんと設定として加えておくこと。

“`javascript:server.js

const mysql = require(‘mysql’);

const con = mysql.createConnection({
host: ‘localhost’,
user: ‘root’,
password: ‘password’,
database: ‘database_name’,
multipleStatements: true
});

“`

“`javascript:server.js
app.get(‘/users/:id’, (req, res) => {
var user_id = parseInt(req.params.id)

const sql_1 = `select * from users wher

元記事を表示

【Deno】Deno1.28「npm完全に理解した」

Denoは先日v1.25で2022/08/25に[npm対応したぞー](https://qiita.com/rana_kualu/items/7eb1acff8f66948b04eb)と発表したのですが、[そのバージョン](https://deno.com/blog/v1.25)では`Experimental npm support`、あくまで実験的サポートであり、まだ実戦投入できる段階ではありませんでした。
そんなわけで実際に使えるのはまだまだ先だねえと思っていたのですが、2022/11/14に公開されたv1.28で早くも`Experimental`が取れました。
はえーよ。

ということで以下は[該当のリリースノート](https://deno.com/blog/v1.28)の紹介です。

# [Deno 1.28: Featuring 1.3 Million New Modules](https://deno.com/blog/v1.28)

[Deno 1.28](https://github.com/denoland/deno/releases/tag/v1.28.0)を公

元記事を表示

twitter api v1からv2へ(その2)

# はじめに
 [twitter api v1からv2へ](https://qiita.com/hawaii_hahaha/items/479639dd5e656ecba5e7)を書いたが、oauth pkceについてはまだだったのでそのご報告

# 手順
 1)twitter developerでの登録
“`
  App permissions=Read and write and Direct message
Type of App=Web App, Automated App or Bot
App info
Callback URI / Redirect URL=http://127.0.0.1:3000/callback
Website URL=https://twitter.com/
  以下は入力していない
“`
そして、そのあと、Keys and tokensのタブにいって、最後のOAuth 2.0 Client ID and Client Secretの部分で、Client IDとClient Secretをメモする・

元記事を表示

ポーリング処理でもawaitが使いたい

async/await、便利ですよね。
Javascript(Typescript)を利用していたら当然のようにお世話になっていることと思います。

今回はポーリング処理の終了をawaitで待ちたいというお話です。
何個か実装方法を思いついたのですが、どうにも悩んだ割に汎用性がなさそうな気がしてるので、記事にすることで供養したいと思います。

## やりたいこと

状況を整理して、やりたいことを明確にします。
処理の流れは下図の通りです。
今回は4,6の部分をPromiseに置き換え、awaitすることで4,6,7の処理が手続き的に書けるようにしたいと思います。
満たすべき要件は
1. ポーリング完了条件を満たしたらresolveするPromiseを返却すること(サーバー側での処理失敗の場合については、完了パターンができれば容易に実装できるので割愛)
1. ポーリング終了時やページ遷移時など、必要なタイミングで外側からポーリングをキャンセルできること(裏で無限にsetIntervalが動き続けないようにする)

“`mermaid
sequenceDiagram
クライアン

元記事を表示

OTHERカテゴリの最新記事