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

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

Webアプリケーション初心者がNode.jsでWebサーバーを構築してみた

始めまして。ソフトウェアメーカーで働いている新卒1年目のぺーぺーエンジニアです。

自社製品の話なのですが、今まで[Electron](https://www.electronjs.org/ja/docs/latest)で開発していたものを、EC2へ移行するということをやろうとしています。
が、1か月前に配属されるまでWebアプリケーションなんか作ったこともないし、なんのこっちゃという感じでした。

というわけで色々調べながらNode.jsを使ってHello Worldを返すWebサーバーを構築してみたという話です。

# この記事が約に立つかもしれない人
– なんかWebコンテンツ作ってみたいけどなんもわからんという人(この記事を書く前の筆者がそう)
– Node.jsてなに という人
ちなみに筆者の環境はWindowsですが、Macでも似たような手順でできると思います。
# Node.js
Node.jsは、JavaScriptの実行環境です。
一言で片づけてしまうと、「JavaScriptでサーバーサイドの処理が書けるよ」というものですが、最近はクライアントサイドのアプリ開発もで

元記事を表示

MinecraftのチャットとDiscordが連携できるらしい

この記事は2020年に今は無き別サービスに投稿したものを、今更Qiitaに再投稿したものです。

# 「rcon」って何に使うのだろうか
Minecraftのサーバーのバージョンを更新して`server.properties`を見直していた際に、`enable-rcon`という項目を発見した。気になったので、「Minecraft rcon」でググってみた。そこで見つけたのが、**Minecord**だ。もりやませーたさんという方が作り、MITライセンスで公開されている。どうやらNode.js製のサーバーで、そこからMinecraftサーバーのrconを利用してDiscordのチャットを流しているということなのだろうか。

# 早速導入
もりやませーたさんのブログ、「[ModなしでMinecraftサーバーとDiscordを連携するツールを作った](https://s8a.jp/connects-minecraft-and-discord-minecord)」を見て、その通りに進めていく。

進めていく前に、実行には当然ながらNode.jsの環境が必要である。また、Minecordはnp

元記事を表示

nodejs + express + mysql + passport を用いて簡単なログイン機能

# はじめに
ログイン機能はとても基本的な内容であるが、ある意味ともて大事な機能である。
最近は自分のデータベースにパスワードを保存せず、GoogleやFacebookのIDを代わりに利用できるので、
ユーザーの個人情報管理の重要さは、個人が運営するサイトなどにおいては減っている気がする。
ここではnodejs + express + mysqlを用いてログイン機能、方法を書く。

# 環境
window 10
nodejs 3.1.8
mysql 8.0.31
express: 4.18.2

# Code
## Mysql
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/ef6188a8-be46-0649-cce7-34da3d26adbc.png)
DBeaverからmysqlのaccountsのテーブルにこのようにユーザーの個人情報と、id, passwordを入れた。
ここでuser_idは固有の識別番号として設定した。

## Nodejs
“`:passp

元記事を表示

Socket.IOを使って、Node.js(client)とPython(Server)の双方向通信

Node.jsとPython間で、Socket.ioでメッセージをやり取りする自分用メモ。
いやぁ、、、Python難しい、、、まじでわけわからん。。

# やりたかったこと
* Pythonが定期的に(やや重たい)演算処理を実行している
* Python側の演算処理が一巡したら、Node.jsへ結果を送りたい
* また必要に応じてNode.js側からPython側へ演算のもとになるデータを送りたい
* Python側がメインのシステム。
 ⇒PythonからNode.jsと、Node.jsからPythonへ、双方向でやり取りしたい
 ⇒とりあえずメッセージをやりとりするための土台をつくろう!

# 環境
* Windows 10 64bit
* Node.js(v18.0.0)
* Python(3.7.9)

# Python のパッケージ
* cmd > pip install python-socketio
 ⇒依存:python-engineio, bidict
* cmd > pip install eventlet
 ⇒依存:dnspython, greenlet, s

元記事を表示

クセがつよいFirestoreトランザクションの書き方【Node.js】

## はじめに
FirebaseのNoSQLデータベースであるFireStoreは、トランザクション制御が可能です。
しかし、RDBとは異なりクセのある概念や書き方に戸惑う方が多いのではないでしょうか?

私自身、受託開発の案件でFireStoteを扱っておりますが、とにかくクセが強くて何度も挫折しかけました。今回、そんな初見殺しのトランザクションの制御方法についてコードベースで紹介しようと思います。FireStoreを採用した開発で苦戦されてる方は是非参考にしてみてください。

※この記事は、Admin SDKが対象です
※この記事で紹介する制御方法はあくまで私個人のやり方です。正しい考え方・書き方等のベストプラクティスがあれば、ご教授いただけますと幸いです!

## 対象読者
– FireStoreのトランザクションに戸惑っている方
– Admin SDKを使っている方

## SDKについて

FirebaseのSDKは、以下の2種類あります。
– クライアントSDK(web、アプリ)
– Admin SDK (サーバー)

**サーバーサイドでは、Admin SDK を使います

元記事を表示

replaceAll is not a function

# 事象 : jestでテストを実行したらreplaceAllメソッドで怒られた
“`bash
$ yarn jest hogedetail
yarn run v1.22.19
# …省略…
TypeError: this.hogeCode.replaceAll is not a function

104 | computed: {
105 | bookThumbnailUrl() {
> 106 | return `https…省略…/${this.hogeCode.replaceAll(‘-‘, ”)}`
| ^
107 | }
108 | },
109 |
“`

## 原因 : Node.jsのバージョンがreplaceAllに対応していないから
replaceAllはNode.jsのv15.0.0以上でないと対応していないのでした。
参考 : [String.prototype.replaceAll() – JavaScr

元記事を表示

[TIPS]: Node.jsでglobパターンを、RegExpに変換するBetterな法方

[自分ブログより](https://blog.hedrall.work/posts/20221120-glob)

# 結論

以下のコードで`glob`の文字列を`RegExp`の文字列に変換することができました。

“`typescript
const minimatch = require(‘minimatch’).Minimatch;
const globToRegExp = glob => {
const regexp = new minimatch(glob).makeRe();
if (!regexp) throw new Error(`globに変換できません。glob: “${glob}”`);
return regexp.toString().slice(1, -1); // 前後に `/` がついてしまうので、sliceする
};
“`

# 解説

`glob`を`RegExp`に変換する際にちょうど良いライブラリを見つけるのに時間がかかったので、本記事を書きました。

まず `glob to regexp` などで検索すると [glob-to-

元記事を表示

npm run start実行した際、scriptsのprestartを先に実行させる

## 背景
ローカルで色々と遊びたい。
ただ、AWS上の本番環境への影響は避けたい。
また、コマンドの入力も極力減らしたい。
そういう時に使えるTIPS。

復習もかねて、アウトプットしてみる。

## 前提
* Node.js(v16.14.2)
* VSCode
* AWSアカウント

## 結論から先に

package.jsonのscriptsを以下のように設定し、
コマンドで`npm run start`を実行すると、
実は`start`が実行される前に、`prestart`が実行される。

“`package.json
“scripts”: {
“prestart”: “setx AWS_PROFILE kenny_test”,
“start”: “env-cmd -f .env npm run start-without-env”,
“start-without-env”: “nodemon ./index.js”,
}
“`
流れとしては、以下のようになる。

1.`npm run start`をコマンドで実行
2.scriptsの、`

元記事を表示

Azure WebAppsでPuppeteer動かしたかったけど上手くいかないメモ

Azure WebAppsでPuppeteerを動かしたかったけど動かないのでやったことメモしておきます。

## プランなど

– プラン: B1
– ロケーション: East Asia
– ランタイム: Node – 18-lts

## スタートスクリプト

> 続 puppeteer を Azure Web Apps で動かす試み
> https://uncaughtexception.hatenablog.com/entry/2020/01/05/171945

この辺りの記事を見て`/home/start.sh`を作成して

“`sh
#!/bin/sh

apt update \
&& apt install -y \
ca-certificates \
fonts-liberation \
gconf-service \
libappindicator1 \
libasound2 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libc6

元記事を表示

Socket.IOでコンソールベースのチャットを作成する

Socket.IOの勉強によく使われる簡単なチャットを作ってみました。
公式ドキュメントや各種記事には、ブラウザベースのチャットの例が多くありますが、今回はコンソールベースのチャットを作ってみました。
“`js:index.js
const io = require(‘socket.io’)();
io.listen(3000);

io.on(‘connection’, (socket) => {
console.log(`connected, id: ${socket.id}`);

socket.on(‘chat message’, (user, message) => {
data = `${message} from ${user}`;
console.log(data);
socket.broadcast.emit(‘chat message’, data);
});

socket.on(‘disconnect’, () => {
console.log(`disconnected, id: ${socket.id}`);

元記事を表示

Dockerを用いたnode.jsの実行環境構築

Dockerを用いてnode.jsの実行環境を構築しました.
nodejsのbase imageをpullせずに,ubuntuのbase imageにnode.jsをインストールする形で構成しました.

#フォルダの構成
“`text
├─Dockerfile
└─bash
└─nodesource_setup.bash
“`

# ファイルの内容
“`Dockerfile:Dockerfile
FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y –no-install-recommends \
apt-utils sudo git curl vim unzip openssh-client wget gnupg2 lsb-release software-properties-common \
build-essential cmake \
libopenblas-dev \
libglib2.0-0

元記事を表示

Nodenv経由でNodejs のバージョンを16をあげた際に「(mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))」が出るときの対処法

– Nodenv経由でNodejsのバージョンを16系へあげた
– M1 macを使ってる

の場合に、「(mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))」のようなエラーが出ることがあります。
これはNodejs16系とそれ以外のバージョンでインストール時の挙動に差分があることが原因(となり得ることがあり)、以下のようなコマンドで指定した上で再インストールすると解消する可能性があります。

“`terminal
$ arch -x86_64 nodenv install 16.16.0
“`

元記事を表示

【Node.js】コールバック地獄の関数からPromiseを使って同期処理後に値を取得する

## はじめに
意外と検索してパパっと出てこないので記事化してみました。

Azure上のMySQLとの接続処理をコーディングしていたので、サンプルのコードはMySQLのusersテーブルからデータを取得する処理をイメージしています。

## 実現したいこと
async/awaitを使って非同期処理内で関数を同期実行して、返り値を同期的に取得したいケースがあるんじゃないかと思います。
“`sample.js
(async function() {
response = await requestApi();
console.log(response);
})();
“`

Promiseを返してくれる関数だったら楽でいいのですが、例えば下記のようにコールバックにコールバックを重ねている関数を全て同期処理させた後、値を取得するにはどうすればいいのでしょうか。

“`dbaccess.js
import * as mysql from ‘mysql’;
import * as fs from ‘fs’;
import * as dotenv from ‘do

元記事を表示

[nodejs + mysql] routesでapiを管理する

# 初めに
nodejs + mysql でベックエンドのコード書いているが、徐々にコートが長くなってカテゴリごとに分ける必要性を感じた。
ここで、routerという機能を使ってより管理しやすく環境を整えることを書いておく。

# 環境
window 10
mysql 8.0.31
ejs: 3.1.8
express: 4.18.2
## Dir
“`:dir
├─public
index.html
users.html
├─routes
users.js
└─views
server.js
“`
# Code
## routesで分ける前
“`javascript:server.js
const express = require(‘express’);
const mysql = require(‘mysql’);
const app = express();
app.set(‘view engine’, ‘ejs’)

const con = mysql.createConnection({
host: ‘localhost’,
user: ‘

元記事を表示

【Next.js】useEffectが2回実行されてしまう

## 環境
OS: MacOS Ventura 13.0.1
Node.js: v17.0.0
next: 13.0.3
react: 18.2.0

## 起きていた問題
nextの基礎学習をしていて、ステートの値をテーブルに出力したところ、同じデータが2回繰り返されていました。
(ソース割愛)

## 解決した方法
next.config.jsにこれを追加、変更する。

“`javascript
//next.config.js
const nextConfig = {
reactStrictMode: false,//これを追加
};
“`
開発環境でしか起きないようですが、気持ち悪いので変えときます。

## 参考にしたページ

https://b.0218.jp/202207202243.html

https://dagashi.pw/react18-useeffect-twice/

元記事を表示

node.jsでチャットしながら出来るブラックジャックを作りました

こんにちは
お久しぶりです。りちゃ丸です
10月までに完成させると言っていたチャットの出来るカードゲームなのですが
何とか完成しました
今回はブラックジャックになります
![ブラックジャック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2879865/4386bafd-e340-b863-73f7-1fbe417fc27e.jpeg)
“`app.js
‘use strict’
const express = require(‘express’);
const socketIo = require(‘socket.io’);
const http = require(‘http’);
const fs = require(‘fs’);
const bodyParser = require(“body-parser”);
const ejs = require(‘ejs’);
var url =”./index.ejs”
const html =fs.readFileSync(url,’utf-8′,

元記事を表示

twitter stream apiで遊ぶ

# 概要
 twitter stream apiでワールドカップのtweetをpostgreに格納してみた。

# 準備
 nodeは必須。
npm i twitter-api-sdk
npm i pg
で、postgresqlは11だが、これは設定してあるのが前提
 table名はtweetで設定、id[serial],created_at[timestamp],author_id[varchar],text[varchar]
 ここまであれば、以下のファイルを次のコマンドで動かすだけ
 node pgst.js

# source
“`pgst.js
Tw = require(‘twitter-api-sdk’);
client = new Tw.Client(process.env.twitter_bearer_TOKEN);
const pg = require(‘pg’);
pgclient = new pg.Client({database: ‘yourdbname’});

async function main() {
await client.twe

元記事を表示

スマートウォッチをリマインダ代わりにバイブレーションさせる

題名みても、よくわからないような気がしますが、やりたいことは、普段つけているスマートウォッチ「Xiaomi Mi Band 3」に、自分で好きなメッセージを、自分の好きな時に通知して、スマートウォッチをバイブレーションさせます。
で、特にXiaomi Mi Band 3である必要はなく、一般的なスマートウォッチでよいです。
私は、LINEとXiaomi Mi Band 3を連携させているので、LINE通知が来ると、Xiaomi Mi Band 3がバイブレーションするようになっていますが、LINEとは関係なく、自分で好きなメッセージを、自分の好きな時にバイブレーションさせようというのが今回の趣旨です。
対象のスマホはAndroidです。

もろもろのソースコードは以下のGitHubに上げてあります。

poruruba/NotificationManager

https://github.com/poruruba/NotificationManager

# 対象のスマートウォッチ

適用可能なスマートウォッチは、アプリ連携できるアプリを選べるスマートウォッチです。
おそらく、たいて

元記事を表示

jit-grunt

# jit-grunt

まだgruntを使っていて、たくさんのloadNpmTasksを実行している環境もある模様。
そこでjit-gruntが有効であったことを残しておきたい。

“`bash
module.exports = function(grunt) {

grunt.initConfig({
// config類
});

grunt.loadNpmTasks(‘grunt-contrib-concat’);
grunt.loadNpmTasks(‘grunt-contrib-clean’);
grunt.loadNpmTasks(‘grunt-contrib-uglify’);
grunt.loadNpmTasks(‘grunt-contrib-watch’);
grunt.loadNpmTasks(‘grunt-contrib-imagemin’);
grunt.loadNpmTasks(‘grunt-contrib-compress’);
grunt.loadNpmTasks(‘grunt-contrib-html

元記事を表示

Discord.jsで短縮URLを作りたい

# Discord.jsで短縮URLを作りたい
突然ですがDiscordでURLを短縮したい!って思ったことはありませんか?
っていうことで今回はDiscord.jsを使ったURL短縮プログラムを紹介します
***
## 必要なもの
* Node.js 16.x 
* discord.js ^13.12.0 
* My bot (持ってなきゃ作れない)

## 作り方

ではまずnpmを入れていきます
isgdをいれます
“`json:package.json
{

“engines”: {
“node”: “16.x”
},
“dependencies”: {
“discord.js”: “^13.12.0”,
“isgd”: “^1.1.3”,
}
}
“`

そしてこのようなやつを書きます

“`java:index.js
const { … } = require(“discord.js”);
const client = new Client({
intents: […],
});

var isgd = r

元記事を表示

OTHERカテゴリの最新記事