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

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

Promiseで定義したコールバックの実行順序

Promiseを定義したときにasync/awaitするとコードを見たまま上から下に実行されるので難しくないのですが、then/catchで後の処理を定義するとどのタイミングでコールバックが実行されるのかわかっていませんでした。

ちょっと調べてみたのでまとめます。

# サンプル

aとbというPromiseを作ってそれぞれの関数の中でログを出力してみます。
また、各定義の間と、aとbをPromise.allした後にもログを出力します。

“`TypeScript
const a = new Promise((resolve, reject) => {
console.log(‘a’);
resolve(‘a: resolve’);
})
.then(() => { console.log(‘a: then’); });

console.log(‘aの後’)

const b = new Promise((resolve, reject) => {
console.log(‘b’);
resolve(‘b: resolve’);
})
.then(() =

元記事を表示

Vue/CliをIISにデプロイ

# やりたいこと
– Vue/Cliで作ったものをIIS上で動かす
– ついでに、Vue 2.xとVue 3.xで作ったものを、両方動かす

必要な手順だけに絞って、なるべくシンプルに整理してみた。

# 前提条件
– Windows10に、IISがインストールされていること
– Windows10に、Node、Vue/Cliがインストールされていること

# 手順
– Vueのサンプルを作成
– 基点ディレクトリを設定
– Vueのプロジェクトをビルド
– IISにVueのプロジェクトをデプロイ

# Vueのサンプルを作成

##### プロジェクトを作成

> まずは、Vue 2.xでサンプルを作成する。
> “`> vue create vue_v2“`
> ~ 選択肢で「Default ([Vue 2] babel, eslint)」を選択
> ![01_プロジェクト作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850619/8a0eba04-7712-7292-3366-4ea5

元記事を表示

【NestJS入門?】NestJSを使用してCRUD実装!

![logo-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2356280/85ba3780-a0d8-9ce7-f55e-a150fdea6684.png)
### NestJSとは
NestJSとは、NodeJS環境で動くサーバーサイドアプリケーションフレームワークです。

基本的にTypeScriptでコーディングを行いますが、JavaScriptで書くことも可能です。

Expressをコアに作られているので、Expressの機能は備えつつ、テストフレームワークJestを標準装備していたり、NestCLIを利用して効率良く開発を進めることができたり、多くの機能を搭載しています。

今回は、DockerでPostgreSQLサーバを立ち上げ、NestJSを用いた商品管理のCRUD実装を行なっていこうと思います。

### 1. NestJSのプロジェクト作成
NestCLIを使用して、NestJSのプロジェクトを立ち上げます。

まずは以下コマンドで、NestCLIがインストールされて

元記事を表示

俺みたいになるな!Lambda+Node.jsでDynamoDBにputItemするだけで半日溶かしたAWS SAP

## やりたいこと
ただただシンプルにLambdaでDynamoDBに書き込みたい。それだけなんです。初体験でも無い。
なのにハマって、シルバーウィークの初日の半日それで溶かしてしまいました。
AWS SAPの称号を剥奪されるかと思って誰にも相談できませんでした。

https://qiita.com/kakudaisuke/items/174ff82b558b86d041b4

ちなみに、なんでそんなことしたいかというとコレです↓ :frog:

https://qiita.com/kakudaisuke/items/18681418cebc3bee93b5

## 実装!
### DyanmoDBの設計
完了したタスク(task)を、ユーザー(user)、日付(date)ごとに登録したいです。
で、取り出す時はあるuserとdateのtaskを全て取得したい。

試行錯誤の末、保存したいアイテムはuser, unixtime, date, taskにしました。

ちなみに、user, dateはDynamoDBの予約語。予約語だけど使えちゃう。queryする時にちょい厄介だけど使

元記事を表示

AWS Lambda + Node.jsの実行環境でローカルタイムを扱いたいが、とりま日本時間JSTに甘んじる(JavaScript)

## やりたいこと
AWS Lambdaで時間を扱うのに、日本時間JSTが欲しい。(本当はローカルタイムが欲しい。)
だけど、Lambdaではローカルタイムという概念がないらしく、全てUTCになってしまう。
日本時間JSTが欲しいと思っていると、9時間ずれた値が返ってきたり、表示が`19/9/2022`となって欧米か!とツッコミたくなったり、してしまう。

ちなみに、なんでそんなことしたいかというとコレです↓ :frog:

https://qiita.com/kakudaisuke/items/18681418cebc3bee93b5

## 実装!
色々調べたが簡単に済ませたかったので、とりま+9時間してJ、日本的なフォーマットに自力でした。

“`js:index.js
let dateTime = new Date();

// JSTにする
time.setHours(dateTime.getHours() + 9);

// 2022/9/19の形にする
const year = dateTime.getFullYear();
const month = dateTim

元記事を表示

Node.js忘備録 ~WEBサーバーの建て方

NodeJSを用いたWEBサーバーの作り方について忘備録です。
# 環境について
Replit.comというオンラインIDEを用いています。
全ての言語使えるので便利です。
https://replit.com

# WEBサーバー
## ファイル構成
|
|ーーindex.js
|ーーindex.html
## コード (index.js)
“`javascript
//———————————
// HTTPサーバー (express)
//———————————
// ライブラリインポート
const express = require(‘express’);
const app = express();
const http = require(‘http’).createServer(app);

// “/”にアクセスがあったらindex.htmlを返却
app.use(‘/’, express.static(__dirname + ‘/’));
app.get(“/”, (req, r

元記事を表示

Node.jsのインストール方法

“`
ys@mbp ~ % nodebrew -v
zsh: command not found: nodebrew
ys@mbp ~ % node -v
v18.9.0
ys@mbp ~ % brew install nodebrew
Running `brew update –auto-update`…
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).

==> Downloading https://ghcr.io/v2/homebrew/core/nodebrew/manifests/1.2.0
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/nodebrew/blobs/sha256:eed2aeff4fd05a4c2969d670ce9a38bc01832ac90b65a1c773689532c

元記事を表示

【TypeScript】ある型から変数プロパティを抽出するUtility Types

TypeScriptで実装をしてると、特定の型の変数プロパティだけ抽出した型を指定したくなることがたまにあります。
そういうときに使えるUtility Typesをつくりました。

# 前提

例えば次のようなクラスAがあって、コンストラクタの引数は自身と同じインターフェイスを持つオブジェクトにしたいとき、クラスAの持つメソッドも引数に指定しないといけません。

“`TypeScript
class A {
a: string;

constructor(v: A) {
this.a = v.a;
}

func () {
//
}
}

const c = new A({
a: ‘a’,
func: () => {}, // これはよくないので無くしたい
});

“`

でもメソッドまで実際の引数に指定するのは無駄なので、メンバ変数だけを指定したくなります。
このクラスAの場合はメンバ変数が1つなので

“`TypeScript
constructor(v: { a: string }) {
“`

このようにコンストラクタを

元記事を表示

完全無料のDeta Cloudを利用して画像ファイルのアップロード/ダウンロードサイトを作ってみた

# はじめに

Node-RED実行環境としてHerokuの代替え先を探している時に見つけた完全無料のDeta Cloud。

![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f61e2072-f46b-66c9-d538-9bed805eeac6.jpeg)

Node-RED実行環境としては利用できなかったが、画像ファイルのアップロード/ダウンロードサイトを作ってみた。

https://qiita.com/kitazaki/items/970a10cbd1059c89aca5

## Deta Cloudとは

完全無料で以下の3つのサービスが提供されている。

– Deta Base: NoSQLデータベース (保存容量は無制限)
– Deta Micros: PythonまたはNode.jsの実行環境 (AWS API Gateway + Lambdaが利用されている)
– Deta Drive: 保存容量は10GB

## 画像のアップロード/ダウンロード

Data M

元記事を表示

市販の汎用赤外線リモコンをスマートリモコンにする

複数のメーカーのテレビに対応した赤外線リモコンが多数販売されており、ボタンが大きく、卓上に置いたまま使えるリモコンが増えてきました。
リモコンで、室内の家電を操作するのもありますが、一方で、WebAPIが一般化し、よくある家電のリモコンで、ボタン一つでWebAPI呼び出せるとよいなあと思いました。

そこで、ボタンの大きなリモコンを机の上において、ボタン一つでいろいろなIoTを制御するスマートリモコンを作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/2d8ad2c2-f7b8-4ee9-3813-45fe26628d6a.png)

汎用赤外線リモコンは、学習リモコンである必要はありません。
見た目や操作性を重視すればよいです。
複数の国内メーカに対応したリモコンがよいですが、NEC式の赤外線信号プロトコルを使う場合は例えばパナソニックを選択します。
汎用赤外線リモコンでボタンを押下すると、パナソニックのテレビ用の信号が赤外線で送信されます。

赤外線は、M5S

元記事を表示

Auth0の「Actions」を使い、ログイン後に**する

Auth0 には「[Actions](!https://auth0.com/docs/customize/actions)」という機能があります。
Actions を利用すると

* ユーザーがログインした直後に「**」する
* ユーザー登録を行う直前に「**」する
* ユーザーがパスワードを変更した後に「**」する

など、ユーザーのアクションに合わせて、決まった処理を行うことができます。

今回は、Auth0の「Actions」について調べてみました。

## ユーザーがログインした後に、新しいプロパティを設定する

最初はシンプルなユースケースにします。
ユーザーがログインした後、ユーザー名やEmailアドレスなどのユーザー情報に加えて「Hello」というプロパティに「World」という値を設定してみます。

Auth0の管理画面から [Actions] → [Flows] → [Login] を選択する

Square Subscriptionを訳して理解する

アプリ界隈ではよくstripeの導入を見かけるが、squareを使う必要性が出てきたので要所を整理する。
https://developer.squareup.com/docs/subscriptions/overview
今回はこの記事やっていく。

## squareの利点
squareの利点については、以下の3点が挙げられている。
##### 1. シンプルな課金
Squareは定期購入(サブスク)の請求を簡素化する。
いつ請求するか、誰が支払ったか、誰が未払いかを気にする必要はない。
Squareは、顧客のメールアドレスに請求書を送ったり、自動的に課金したりと、購読プランに応じたフォローアップを行う。

##### 2.顧客、カード、請求書のシームレスな管理
サブスクリプションAPIは、サブスクリプションのサービスを提供する場合、顧客、顧客カード、請求書の作成と管理を解決するCustomersやInvoicesなどのAPIを含むSquareプラットフォームの他の部分と統合しています。

##### 3.Square Seller Dashboardで利用できる請求書
販売者は、

元記事を表示

keystone.jsをお試したい

# はじめに
 Keystone.jsをお試したい!
 でもMongodbって初期設定がめんどう
 なのでdocker-composeでお試したい!
 だからといってKeystone.jsのdocker-composeで組まれたのを探してみても、なかなか見つからない。そこで一つ、簡単に組んでて理解がしやすそうなGitリポジトリを発見したので、お試してみたというお話です。
 発見したGitリポジトリは次のやつ。

https://github.com/hugominas/recipe-docker-keystonejs-nginx

# エラー

 バージョンの違いなのか何なのか、Gitクローンからdocker-composeでアップしてみても、このkeystoneは立ち上がってもエラーを吐きます。
 内容としてはmonogdbにアクセス出来ていないというもののようで、これを改善すればなんとかなるかなと、デバッグ…と呼んでいいんですね?開始しました。

“`
keystone_1 | ————————————————
k

元記事を表示

【備忘録】Node.jsをバックグラウンドで動かす方法

# はじめに
node.jsをバックグラウンドで動かすための方法を調べたので未来の自分のためにも書き残しておきます。

# 方法① foreverモジュールを使う
以下のコマンドでインストール
“`console
sudo npm install -g forever
“`
実行
“`
forever start hoge.js
“`
プロセスの起動を確認
“`
forever list
“`

# 方法② Dockerコンテナ化する
jsファイルがあるディレクトリに移動してDockerfileを作成。中身に以下の内容を書く。
“`Dockerfile
FROM node:16-alpine3.15
WORKDIR /app
COPY . .
RUN npm install
CMD [“node”, “hoge.js”]
“`
ビルドする。ここではラズパイ上でdockerコンテナを稼働させることを想定しています。ラズパイで使いたいイメージは、ビルド時にプラットフォームを明示しておかないとうまく動作しない可能性があるので「–platform」を使う。
“`docker

元記事を表示

YahooAPIを用いた銘柄情報取得

# はじめに

YahooFinanceに保存されている情報をAPIを用いて取得します。
今回、APIをより扱いやすくする為、OSSの[node-yahoo-finance2](https://github.com/gadicc/node-yahoo-finance2)を用いて取得してみようと思います。
■環境
– macOS
– Node.js
– npm(パッケージ管理)
– Express(WEBサーバ)
– javascript
# 目次

1. [環境構築](#環境構築)
1. [APIを叩いてデータを取得](#apiを叩いてデータを取得)
1. [動作確認](#動作確認)
1. [エンドポイントの作成](#エンドポイントの作成)
1. [参考文献](#参考文献)



# 環境構築
1. package.json及び必要ライブラリのインストール

“`
npm init
npm install expres

元記事を表示

git commitしてもlint-stageしても Unexpected Identifierと怒られる

## 簡単に結論

Node.jsのバージョンが古くてeslintが怒っていた

下記のコマンドでNode.jsをアップデートしたら解決しました!
“`bash
sudo apt update && sudo apt install nodejs -y && sudo npm install n -g && sudo n stable && sudo apt purge -y nodejs npm && sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y
“`

## 経緯

1. 開発途中でPCを買い替えたので、既にeslintやprettier、simple-git-hooks、lint-staged等の初期設定が終わっているGitレポジトリをクローンすることになりました

1. そんな訳で早速下記のコマンドを走らせて準備を終わらせる

“`bash
git clone https://github.com/foooooooo/hogehoge.git

元記事を表示

AWS Step Functions で簡易的なジョブ管理ステートマシンを作成してみる

AWS で簡易的なジョブ管理をしてみよう、という試みです。

# 概要

AWS 上でジョブ管理するにはどうしたら良い?という話がありましたので、自分なりに少し考えてみました。普通に考えれば、例えば以下のようになるかとおもいます。

* Cloud Watch Events、場合によっては Event Bridge を使ってジョブを起動する
* ジョブの流れは Step Functions で様々なフロー制御を組み込んで作成
* Step Functions から Lambda 関数、ECS RunTask、AWS Batch などを順次呼び出す
* ログは Cloud Watch Logs に格納
* 問題発生時には SNS から SES や Slack 連携などでアラートを発報する

ただですね、今回は以下のような制約をつけて考えてみました。

* 数人の小さなチームで、スケジュールがかなり厳しい中で開発する必要がある
* AWS に詳しいのは自分だけで、他のメンバーはこれから学ぶ必要がある

こういった状態ですと、いまから AWS を学んでもらうのは効率が悪いです。期間も短いこと

元記事を表示

1分でわかるNextJS+ChaktaUI画面遷移

## 早速説明いたします。

“`
yarn add next/link
“`

“`
yarn add @chakra-ui/react
“`
まずはプロジェクトのルートディレクトリでこの二つを実行しましょう。

そしてjsxファイルなどで

“`js
import React from ‘react’
import { ChakraProvider } from ‘@chakra-ui/react’
import { Link } from ‘next/link’

//Homeの部分は任意でOKです。
function Home () {
return (


page2

)
}

export default Home

“`

で実装できるはずです。

事前に遷移先のページファイルも用意しておくとよ

元記事を表示

Node.jsランタイムのLambdaでNodeモジュールを使いたいときにやったこと

## はじめに
こんにちは。フリューでサーバサイド開発をしています、kitajimaです。最近CDKに入門しました。
弊チームでは先日、API Gateway + Lambdaの構成をCDKで構築し、APIを実装する機会がありました。その際Node.jsで書いたLambdaスクリプト単体をアップロードしたところ、`”Unable to import module”`が発生しました。
この記事ではその際対応したことを紹介させていただこうと思います。
同じようにNode.jsランタイムのLambdaを初めて構築してみたい方の参考になれば幸いです。

※本記事と同様の内容を弊社テックブログでも掲載しております。
https://tech.furyu.jp/lambda-node-modules/

## 環境
– AWS CDK v2
– CDK実装 TypeScript
– Lambdaランタイム Node.js 16.x
– Lambdaスクリプト実装 TypeScript

## 状況再現
そのときのインフラ構成の一部を再現したものはこちらです。Constructは`aws_lam

元記事を表示

How to create Nextron(NextJS + electron) app?

## そもそもNextronとは何なのか

Nextronとはelectron+NextJSの環境を今までより簡単に構築できるようにつくられた(らしい)ツールです。とはいえ私はいきなりこれでやったので今までのやり方をしらないんですけども結構開発がしやすいです。

## プロジェクト作成方法

まずは以下のコマンドを入力

“`
npx create-nextron-app
“`

割と軽めなので回線が良ければすぐ終わります。

そして
“`
npm run build
“`
と入力してビルドします。これをしないとエラーになるのでお気を付けて。通常のelectronだとpackage.jsonとかmain.jsを作成・編集しないとうまく起動しませんが、Nextronは勝手にやってくれるので楽ですね。

んじゃあ

“`
npm run dev
“`
と入力すれば実行できます。

ちなみに起動時は開発者ツールが自動で立ち上がります。メインページはrender/pages/home.jsxとなります。まずはそのファイルを編集して挙動を確かめてみましょ

元記事を表示

OTHERカテゴリの最新記事