- 0.1. Docker AmazonLinux2のコンテナにNode.jsを入れている部分の処理を紐解いてみた
- 0.2. Node + TypeScript で MySQL に接続して Read, Write してみる
- 0.3. pm2 deploy しようとしたが、「WARNING: UNPROTECTED PRIVATE KEY FILE!」でデプロイ出来なかった。
- 0.4. Discord.jsでOauth2を使いweb認証を作る!
- 0.5. Amplify CLIを使って、ローカルで実行&AWSにデプロイ
- 0.6. [OCI]MongoDBクライアントからAutonomous JSON Databaseに接続してみた(Node.jsアプリケーション編)
- 0.7. ws:WebSocketServerはBlobで受ける
- 0.8. GitHub Actions で apt/perl/node ツールのインストールを自動化する
- 0.9. npm run dev が上手くできない時の対処法 〜 Error: error:0308010C:digital envelope routines::unsupported 〜
- 0.10. NestJSのDockerコンテナをCloud Run + Cloud SQLへデプロイする方法
- 0.11. Webの勉強はじめてみた その23 〜HTTPサーバー編〜
- 1. HTTPサーバー
- 1.1. 【nodejs】NodeJS v17.4.0 ソースインストール【RockyLinux】
- 1.2. 【Node.js、Javascript】Seleniumで要素のXPathを一気に取得する。
- 1.3. 【Node.js、Javascript】SeleniumでOffice365にログインする
- 1.4. 【Node.js、Javascript】Seleniumで疑似要素の属性値を取得する
- 1.5. Node.js: ssh 接続
- 1.6. フロントエンド問題と、Laravel における解決策
- 1.7. Node.js 【MySQL 8.0 に接続できない。】
- 1.8. Webpackerでerror Command “webpack-dev-server” not foundになる
- 1.9. @google-cloud/bigquery などのライブラリを利用した際に発生した「Type ‘void’ is not assignable to type ‘this’」的な型エラーについて
Docker AmazonLinux2のコンテナにNode.jsを入れている部分の処理を紐解いてみた
# 概要
– 他の方が作ってくれたのLaravelアプリケーションローカル開発環境のAmazonLinux2コンテナにNode.jsを入れている部分の処理をまとめてみる
# Node.jsの入れている部分Dockerfile
– 下記のような処理をしている。
“`Dockerfile
RUN curl -fsSL https://rpm.nodesource.com/setup_14.x | bash –
RUN yum -y install nodejs && \
npm i -g n && \
n 14
“`– 理解しやすくするため&&と\で一行に記載されている部分を冗長だがRUNになおしてみる。
“`Dockerfile
RUN curl -fsSL https://rpm.nodesource.com/setup_14.x | bash –
RUN yum -y install nodejs
RUN npm i -g n
RUN n 14
“`
Node + TypeScript で MySQL に接続して Read, Write してみる
## 背景
node + TypeScript で MySQL に繋いで少しだけデータ操作をする場面があったのですが、あまり記事無くて苦戦したので備忘録として残しておきます。
## 実装方針
– O/Rマッパーのような大きいライブラリじゃなくても済む規模だったので [mysql](https://github.com/mysqljs/mysql) を使用して生クエリで対応
– コールバック地獄にならないようにしたい
– しっかりトランザクションはかけておきたい## バージョン
– node: v14.17
– mysql(ライブラリ): 2.18.1
– MySQL(DB): 5.7## 実装
### 接続
“`ts
import { createPool } from ‘mysql’;(async () => {
const pool = createPool({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MY
pm2 deploy しようとしたが、「WARNING: UNPROTECTED PRIVATE KEY FILE!」でデプロイ出来なかった。
PM2デプロイコマンドを叩いたら、下記のようなエラーがでて、デプロイできなかった。
そうなった原因はわからない。数日前までは問題なくデプロイ出来ていたので…“`terminal
$ pm2 deploy production
–> Deploying to production environment
–> on host ***********○ deploying origin/master
○ executing pre-deploy-local
○ executing pre-deploy `git pull`
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for ‘/Users/***/.ssh/***.pem’ are
Discord.jsでOauth2を使いweb認証を作る!
#初めに
Discord.jsでと書きましたが正確にはaxiosでです
仕組みとしては
Discord.js<=>MongoDB
サイト=>axios=>Discord-oauth=>mongoDB=>Discord.js=>Discord
的な感じです
Node.jsのみで書いたので少し汚いです#必要なもの
Discord.jsv13(最新なので)
Node.jsv16(Discord.jsがv16以降でしか動かないので)
axios(POST&GETするために)
express(サイトを立てるために)
aurora-mongo(MONGOとの接続を楽にするために)`npm i discord.js express axios aurora-mongo`
#コード
“`js
const {Client, Intents, MessageActionRow,
MessageButton} = require(‘discord.js’),
//分割代入する
client = new Client({intents: [Intents.FLAGS.GUILDS, I
Amplify CLIを使って、ローカルで実行&AWSにデプロイ
Amplify CLIを使って、REST APIや静的コンテンツのサーバを立ち上げます。
ローカル環境で実行・デバッグして確認したのち、AWS上にデプロイ・実行します。ローカル環境でのデバッグには、node.jsとVisual Studio Codeを使います。
AWS上には、API Gateway、Lambda、S3を使います。
上記の橋渡しに、Amplify CLIを使います。今回使うのは、AmplifyではなくAmplify CLIです。
なぜこのような言い方をしているかというと、Amplifyは、いろいろ自動化してくれているのですが、何をしているかよくわからないので、長期的にメンテナンスがしづらく、バグに遭遇する可能性もあるためです。
なので、Amplify CLIを使って、API Gateway、Lambda、S3を一つ一つ作っていきます。それと、Amplifyで構築すると、今までS3やAPI Gateway、Lambdaにばらばらで分散していたパーツ群がAmplifyに集約されるので、まとめてみやすくなります。
目指す形は以下の通りです。
![image.p
[OCI]MongoDBクライアントからAutonomous JSON Databaseに接続してみた(Node.jsアプリケーション編)
#はじめに
これまでの以下の記事で、Oracle Database API for MongoDBを利用することによりMongoDB Shell、mongoexport/mongoimportなどのMongoDBクライアントからAutonomous JSON Databaseを操作できることを確認しました。
[[OCI]MongoDBクライアントからAutonomous JSON Databaseに接続してみた(MongoDB Shell編)](https://qiita.com/500InternalServerError/items/20f646bc38725dea580b)
[[OCI]MongoDBクライアントからAutonomous JSON Databaseに接続してみた(mongoexport/mongoimport編)](https://qiita.com/500InternalServerError/items/a03003e7979d62a4b019)今回は、MongoDBの使用を前提に書かれているアプリケーションが、接続先をAutonomous JSON
ws:WebSocketServerはBlobで受ける
「ws node.js」で検索して出てくるサンプルコードがどれも送信内容次第で失敗する。
テキストからBlobに変えたらうまく行った。根本的原因は不明だがとりあえず。“`javascript:nodeApp.js
const WebSocketServer = require(“ws”).Server
const server = new WebSocketServer({ port: 5001 })
server.on(“connection”, client => {
client.on(‘message’, message => {
server.clients.forEach(v => {
if(v !== client) v.send(message)
})
})
console.log(‘_connections’,server._server._connections)
})
“`
“`javascript:plainWeb.js
$(e=>{
var m = new Messenger.Nodejs().message(e=>{
co
GitHub Actions で apt/perl/node ツールのインストールを自動化する
# Summary
This is an article about GitHub action to automate apt/perl/node tool installation. Installed files are cached for later use. `use-apt-tools` and `use-perl-tools` are for apt/perl tools. `use-x-tools` is for both. `install-node-modules` is for node package installation and cache all `node_modules` under the specified directory. Read each repository’s README. Visit https://github.com/office-tecoli/.
# 必要なツールを簡単にインストールしたい
ある作業で GitHub Actions を使おうとしていて、その中で apt と perl と node のツー
npm run dev が上手くできない時の対処法 〜 Error: error:0308010C:digital envelope routines::unsupported 〜
## はじめに
こちら自分用のメモであるためとても雑な記事です。
ただ、同じようなエラーが出た人の助けに少しでもなれば幸いです。
## エラーログ![スクリーンショット 2022-01-21 22.50.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/9e7dfc55-f58b-3151-d338-a03e89d2cbce.png)
“`.zsh
> 〇〇@1.0.0 dev
> webpack –watchError: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:135:10)
“`##原因
Nodeのバージョンが高すぎることが原因のようです##解決策
Nodeのバージョンを下げる###環境
macOS Montere
NestJSのDockerコンテナをCloud Run + Cloud SQLへデプロイする方法
## はじめに
NestJSの開発環境をローカルのDockerコンテナ上に構築し、簡単なAPIの実装を行なってから、本番環境としてCloud Run + Cloud SQLへデプロイする方法を記載します。
## DockerコンテナでNestJSを起動する
NestJSアプリとデータベース、両方のコンテナを同時に起動するためにDocker Composeを使いたいので、docker-compose.ymlを作成します。
“`bash
$ mkdir my_project && cd my_project
$ touch docker-compose.yml
“`ローカルの開発環境なのでデータベースのパスワードなどはべた書きで構いません。
ここでのポイントはNestJSアプリのルートディレクトリを`nest-app`という一つ下の階層に
しておくこことと、`node_modules`を**匿名ボリューム**に設定することです。
そうしないと、バインドマウントされて`node_modules`の中身が消えてしまいます。“`yaml
version: ‘3’
servi
Webの勉強はじめてみた その23 〜HTTPサーバー編〜
N予備校「プログラミング入門Webアプリ」を受講しています。
今回は第3章12〜15節です。HTTPサーバー
`node.js`のモジュールを使ってサーバーを立てる
“`javascript
‘use strict’;
const http = require(‘http’);
const fs = require(‘fs’);const server = http
.createServer((req, res) => {
const now = new Date();
console.info(`[${now}] Requested by ${req.socket.remoteAddress}`);
res.writeHead(200, {
‘Content-Type’: ‘text/html; charset=utf-8’
});switch (req.method) {
case ‘GET’:
//res.write(‘GET ‘ + req.u
【nodejs】NodeJS v17.4.0 ソースインストール【RockyLinux】
# NodeJS の最新版 インストール
2022/01/20
– NodeJS : v17.4.0
– OS : Rocky Linux release 8.4 (Green Obsidian)## 手順
### C, C++コンパイラが必要なのでinstall
“`
# dnf install -y gcc gcc-c++ make
“`### Source Install
“`
# cd /usr/local/src
# wget https://nodejs.org/dist/v17.4.0/node-v17.4.0.tar.gz
# tar xzvf node-v17.4.0.tar.gz
# cd node-v17.4.0
# ./configure# ↓ GCE2コア8GBのインスタンスだと1時間くらいかかるので注意 -j
で分散処理可能?
# make
# make install
“`### 確認
“`
$ node -v
v17.4.0$ npm -v
8.3.1$ npx -v
8.3.1
“`
【Node.js、Javascript】Seleniumで要素のXPathを一気に取得する。
# はじまり
一般的にDOMから要素のXPathを取得する方法は、ブラウザの開発者ツールからとされています。
しかし、Seleniumで要素にアクセスするためにいちいちDOMを右クリックしてXPathを取得するのも面倒だと思います。僕の場合は、300回右クリックしてXPathをメモするのは嫌だったので、一気にXPathを取得する方法を探しました。
今回は、そのときのソースを掲載します。# ソース
今回の方法では、2つファイルを作り実現しました。
作るファイルは、ブラウザで実行させるスクリプトが入ったファイルと、普通にseleniumを実行するファイルです。
Chromeで実行し、対象のCSSクラス名は`checkbox`でした。まず、ブラウザ側のファイルとなります。
最後の方は文法としては変ですが、配列のインデックスをスクリプトに載せるために`”scriptSeparator”`と記述しています。“`javascript:ブラウザ側のファイル.js
function getXpathByElement (element) {
var NODE_TYPE_ELEME
【Node.js、Javascript】SeleniumでOffice365にログインする
# はじまり
はじめてSeleniumを使って悪戦苦闘した熱が冷めない内に、成果を上げておきます。
Seleniumで、Office365から立ち上げるアプリの直リンクへアクセスした際に、Office365へのログインが求められた際に切り抜けたソースを貼っておきます。
ブラウザはChromeで行いました。# ソース
コメントアウトしているところはなくても動きますが、Seleniumのコードの動作確認ではあったほうがより役立ったという感覚がありました。
画面遷移の度に10秒くらいは余裕を持っていたほうが良いと思います。driver.waitは試していませんが、他のソースにも転用するために`driver`に依存しないものにしました。
`waitTimeToDisplay`は、各々のアプリによって時間を設定していただければと思います。“`javascript
const { Builder, By } = require(‘selenium-webdriver’);
const { it } = require(‘mocha’);const sleep = waitTime
【Node.js、Javascript】Seleniumで疑似要素の属性値を取得する
# はじまり
今回、Seleniumで疑似要素の`content`属性の値を取得するコードを作成しましたので掲載します。
本ソースは、OutSystemsで作られたシステムにおいて、チェックボックスのチェックの有無を判断するために使用したので、同様にOutSystemsを使っている方も利用できるのではないでしょうか。
動かしたブラウザは、Chromeです。
# ソース
“`javascript
const { Builder } = require(‘selenium-webdriver’);const getPseudoElementsContentsByClassName = async(driver, className, isAfter=true) => {
const funcName = ‘getPseudoElementsContentsByClassName’;
let afterOrBefore;
if(isAfter === true){
afterOrBefore = ‘:after’;
}else{
Node.js: ssh 接続
Node.js で ssh 接続をする方法です。
ライブラリーのインストール
“`bash
sudo npm install ssh2 -g
“`“`js:ssh_exec.js
#! /usr/bin/node
//
// ssh_exec.js
//
// Jan/20/2022
// —————————————————————
const { readFileSync } = require(‘fs’)const { Client } = require(‘ssh2’)
const dotenv = require(‘dotenv’)dotenv.config()
host = process.env.HOST
user = process.env.USER
command = process.env.COMMAND
key_private = process.env.KEY_PRIVATEconst conn = new Client()
conn.on(‘re
フロントエンド問題と、Laravel における解決策
####はじめに
この記事は、「なんとなく理解できた」を目的としているため、正確性、具体性に欠ける表現がございます。精度の高い情報を求めている方には向かないので、ご理解ください。
######フロントエンドとは?
ユーザー側で、見るための機能。
サーバーサイドとは、逆の視点を持ったもの。フロントエンドの種類が増えてきた結果、様々なコードが入り乱れる状態になったので、それらをまとめるものが開発されるようになった。
###まとめ方(コンパイル)
新しい書き方をするフロントエンド側のプログラムを、古い書き方に統一する事(このことをコンパイルという)をして、コードの統一化を図るようになった。
代表的なコンパイルが、BABELなどが該当する。###バンドル
コードの統一化に成功したが、その後ファイルの数が多すぎて、処理が重くなったりする問題が発生したので、バンドルという、複数のファイルを1つに纏める事が行われた。
代表的なバンドルが、webpackである。###管理者の存在
これらのコンパイルや、バンドルをまとめて管理するシステムが現れる。
この、まとめて管理する役割を担って
Node.js 【MySQL 8.0 に接続できない。】
#Node.js 【MySQL 8.0 に接続できない。】
DBからデータ取得ができずに詰まったので備忘録。##起きたこと
– node.jsのパッケージ使って、MySQL8.0に接続しようとするとエラー発生“`
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
“`“`
エラー:ER_NOT_SUPPORTED_AUTH_MODE:クライアントはサーバーから要求された認証プロトコルをサポートしていません。 MySQLクライアントのアップグレードを検討してください(Google翻訳)
“`##原因
– MySQL8.0のパスワード認証形式の違いが原因。
– MySQL8.0の認証プラグイン
– **caching_sha2_password**
– (MySQL5.7までは、**mysql_native_password**)
Webpackerでerror Command “webpack-dev-server” not foundになる
# はじめに
最近Railsの開発環境を作成しています。
[こちらの記事](https://zenn.dev/jinwatanabe/articles/4d26ac177069f374eb6a)で構築手順を載せています。そこで、GitにリポジトリをあげたコードをCloneして起動したところうまく起動できない事態が発生したため手直しのさいに解決した方法をまとめます。また、この記事とは別にWebpackerの問題がもう一つ起きています。
以下の記事から確認ください。https://qiita.com/Sicut_study/items/d3c8b30570ce49dc6d8c
# 問題
DockerでWebpackerを環境を作成して起動したところ以下のエラーが発生しました。
“`
webpacker_1 | error Command “webpack-dev-server” not found.
“`何度か起動するとエラーが消えて、git cloneしてくると初回は発生しました。
# 解決方法
これは`yarn install`された際に自動生成される`/
@google-cloud/bigquery などのライブラリを利用した際に発生した「Type ‘void’ is not assignable to type ‘this’」的な型エラーについて
## 起こった現象
Node.js で `@google-cloud/bigquery` を利用していると、ある日突然このような型エラーが発生するようになった。
“`
node_modules/@google-cloud/paginator/build/src/resource-stream.d.ts:37:5 – error TS2416: Property ‘end’ in type ‘ResourceStream‘ is not assignable to the same property in base type ‘Transform’.
Type ‘(…args: any[]) => void’ is not assignable to type ‘{ (cb?: (() => void) | undefined): this; (chunk: any, cb?: (() => void) | undefined): this; (chunk: any, encoding?: BufferEncoding | undefined, cb?: (() =>