Node.js関連のことを調べてみた2020年04月15日

Node.js関連のことを調べてみた2020年04月15日

Node.js + ibm_db で Db2 に接続してSELECT文を実行する

Node.jsでDb2にアクセスしてみました。
Db2導入済みのLinux環境に、Node.js/ibm_dbをインストールするところからメモを残します。

## Node.jsからDb2にアクセスするための前提
Db2サーババージョンがV10.5.0.4以上であること
クライアントバージョンは制限なし

## 環境
| 項目 | バージョン |
|:——|:——|
| Linux | CentOS Linux 7 (Core) |
| npm | 6.14.4 |
| ibm_db | 2.6.4 |
| Db2 | 11.5.0 |

## Node.js のセットアップ

### 1. Node.js インストール・イメージのダウンロード
Windowsにいったんダウンロードして、LinuxへWinSCPで転送。
https://nodejs.org/en/download/

### 2. ファイル展開
(権限の都合上、rootユーザで実行)
どのディレクトリに展開するかは環境ごとのルールに従うと良さそうですが
個人で使える環境なので、適当なと

元記事を表示

【Node.js】Webpack + Express環境下でのpug(ejsでの可?)導入

#pug導入前環境
Webpack + Express + React + Typescript

#pug導入の理由
導入前はExpressでSSRをし,クライアントからのリクエストに対しres.send(html)で単純にhtmlスクリプトを送信するだけだった.これではデータベースから取得した値をクライアント側に渡すことができない.そのため,テンプレートエンジンであるpug(or ejs)を導入したかった.

#やりたいこと
単純にルートにアクセスされた時にhtmlテンプレートに値を渡してレンダリングしたい.今回やりたいこととしては,レンダリングさえしてくれれば良いので,htmlとしてdistに出力されなくて良い(これをしようとするとWebpackでHtmlWebpackPluginが必要)

“`typescript:server.ts
import express from ‘express’;
const postController = require(‘./controllers/postController’);
const app = express();

app

元記事を表示

async awaitやPromiseはなぜ必要なのか?

# 非同期処理というものが必要な理由

Apache Http Serverは接続ごとにプロセスを生成するような仕組みです。このため、接続してくるクライアントがものすごく多くなると、メモリ領域を圧迫したり、レスポンス性能が壊滅的に低くなります。

この問題は、C10K問題(Client 10,000)と呼ばれ、これを解決するには、小さいリソースで多数のクライアントに対応できる仕組みが必要でした。

その具体的な解決策として出てきたのが、NginxやNode.jsです。今回はJavaScriptにおける`async await`に着目しますので、Node.jsについて焦点を当てます。

Node.jsでは、多数の処理要求をシングルスレッドで(少ないリソースで)高速に捌けるよう、ノンブロッキングIOを実現するアーキテクチャが採用されています。このあたりの詳しい説明は[「Node.jsでのイベントループの仕組みとタイマーについて」](https://blog.hiroppy.me/entry/nodejs-event-loop)で学びましょう。

要求を捌いてくれるスレッドは1つだけなわけで

元記事を表示

[LINE bot] NowとHerokuで常時起動化させる

# この記事の内容
* LINEボットの完成形、常時稼働化のやり方
* そもそもモヤついていたところを自分なりにまとめてみた

## 完成品
(いじってたらなぜかアイコンが黒く怪しくなってしまった・・・どうやって戻すんだろう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/fc3431f0-d077-665a-a2b3-ed1cfd354801.png)

猿よりは賢いアプリを作った。(ただし、人間ほど完璧な回答はできない。)

* ?を付けて聞くと文章で返します
* ?がない時はwikipediaのリンクを返します
* お猿さんが知らない単語のときは、、無視します。。

## QRコード(お友達になってあげてね!)

※このアプリはこの後紹介するHerokuを使ってます。
![smartmonky.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/9bf51304-89

元記事を表示

Alfred4 + emoj|Alfred4で簡単に絵文字が入力できるらしい!→alfred-emojiに変更

Alfred4で簡単に絵文字が入力できるらしい!

しかも無駄にディープラーニングやってるとか(alfred-emoj)

 ↓

違うワークフロー(alfred-emoji)に変更
こっちのほうが新しい、インストール簡単、使い方もわかりやすい

## やったこと

– Alfred4インストール、PowerPack登録
– Node.jsのインストール
– npm -g install xxxに失敗するので、npmのデフォルトディレクトリを作成する
– alfred-emojのインストール
– Alfred Preferences > Workflows > Emoj > Copy to Clipboard > [x]Automatically paste to front most app

これはおもしろい!?

 ↓

– aflred-emojiのインストールに変更

## 参考リンク
Alfred3 おすすめワークフロー 7選 + 1
https://qiita.com/ryo2132/items/ef392999d32732fa0455

alfred-emoj

元記事を表示

vue-good-tableをTypeScriptで使おうとして TS7016: Could not find a declaration file for module ‘vue-good-table’.

# 使用バージョン
“`bash
$ npm list vue typescript vue-good-table
app@1.0.0
├── typescript@3.8.3
├── vue@2.6.11
└── vue-good-table@2.19.1
“`

# 問題
Vue.jsをTypeScriptで使っていて、以下ドキュメントどおりに進めたところ、コンパイルエラー発生。
> https://xaksis.github.io/vue-good-table/guide/#installation

#### エラー内容
“`bash

TS7016: Could not find a declaration file for module ‘vue-good-table’.
‘[app]/node_modules/vue-good-table/dist/vue-good-table.cjs.js’
implicitly has an ‘any’ type.
“`

# 解決
[app]/@types/以下にファイル作成。

“`typescript:vue-goo

元記事を表示

Yarnでローカルのパッケージをaddする方法

この投稿では`yarn`コマンドで、ローカルのパッケージをインストールする方法を紹介します。

通常`yarn add`はnpmjs.comで公開されたパッケージをダウンロードしてきてインストールしますが、ここで説明するのはローカルにのみ存在する自作のライブラリを`add`する方法です。

(`npm`で同様のことをする方法は、「[npmでローカルのパッケージをinstallする方法](https://qiita.com/suin/items/c9c342f557bd885dbe06)」をご覧ください)

## やりかた

ローカルのパッケージをインストールには、単純にインストールしたいパッケージのファイルパスを`yarn add`の引数にします:

“`bash
yarn add インストールしたいパッケージのパス
“`

node_modulesにインストールされるパッケージをシンボリックリンクにしたい場合:

“`bash
yarn add link:インストールしたいパッケージのパス
“`

## ローカルパッケージをインストールする具体例

少し具体例をもとに説明しま

元記事を表示

npmでローカルのパッケージをinstallする方法

この投稿では`npm`コマンドで、ローカルのパッケージをインストールする方法を紹介します。

通常`npm intall`はnpmjs.comで公開されたパッケージをダウンロードしてきてインストールしますが、ここで説明するのはローカルにのみ存在する自作のライブラリを`install`する方法です。

(`yarn`で同様のことをする方法は、「[Yarnでローカルのパッケージをaddする方法](https://qiita.com/suin/items/409dc019de605830b4c2)」をご覧ください)

## やりかた

ローカルのパッケージをインストールには、単純にインストールしたいパッケージのファイルパスを`npm intall`の引数にします:

“`bash
npm install インストールしたいパッケージのパス
“`

## ローカルパッケージをインストールする具体例

少し具体例をもとに説明します。

以下の図のように、`myapp`パッケージと`mylib`パッケージがあり、`myapp`から`mylib`を使いたい例を見てみましょう。

![](http

元記事を表示

discord.js + Klasa を使ったBotの作成覚え書き

参考 : [discord.jsのフレームワークKlasaが強すぎる](https://qiita.com/InkoHX/items/c0c2020e911e87cbdbef)
合わせて読んでください。

# 準備

* 環境
* Win10
* Node.js 12.13.0
* npm 6.12.0

適当にプロジェクトフォルダを作成し discord.js と Klasa をインストール

“`bash
npm install –save discordjs/discord.js dirigeants/klasa
“`

# コーディング

## 最初の一歩

`app.js` を作成

“`javascript:app.js
const secret = require(‘./secret.js’); // BOTトークンはここに記述
const token = secret.token;

const {Client} = require(‘klasa’);

new Client({
prefix: ‘!!’, // ボットのPrefix
lan

元記事を表示

LoopBackのTodoListチュートリアルを実施

## 概要
Node.jsのフレームワークであるLoopBackのTodoListを作成するチュートリアルを実施する。
参考:https://loopback.io/doc/en/lb4/Getting-started.html#create-a-new-project

上記のチュートリアルでは、DBにIn-MemoryDBを利用しているが、ここではMySQLを利用する。

## 環境構築
以下を利用してDockerで環境を構築する。
https://github.com/Esfahan/docker-loopback-tutorial

# TODO Tutorial
todo-list tutorialを行う。
参考:https://loopback.io/doc/en/lb4/todo-tutorial.html

## Requirements
– Node.js at v10 or greater

## アプリケーションを作成
Scaffoldをする。
参考:http://loopback.io/doc/en/lb4/todo-tutorial-scaffolding.

元記事を表示

DynamoDBで”The provided starting key does not match the range key predicate”とエラーが出た場合の対策(node.js)

Lambda(node.js)で、DynamoDBから超膨大なレコードを取得するプログラムを開発していました。
1分単位でクエリを実行して、レコードを小分け取得するようにしたのですが、
その際にプロパティを初期化できていなかったため、標題のエラーが発生したようです。

っていうことが、以下の記事を見てわかりました

https://qiita.com/nanananamememe/items/52293f1fece4458cc2fa

具体的な対策は `delete params[“ExclusiveStartKey”];` みたいな感じで
プロパティを消せば良いです。

すっごく長いですが、備忘録を兼ねてソースコードを掲載します

“`javascript

try {
var ENV = require(‘dotenv’).config();

var AWS = require(‘aws-sdk’);
AWS.config.update({ region: process.env[‘AWS_DYNAMO_DB_REGION’] });
var docClient

元記事を表示

特定のジオメトリが含まれるすべてのXYZタイルを取得する

## Abstract 要旨
GISのデータはラスター(画像)とベクター(点・線・ポリゴン)の2つに大別されます。これらはしばしば膨大なサイズとなり、効率的なデータ配信のためにXYZタイルという概念が存在します。XYZタイルの概念の詳細な説明は割愛しますが、でかいデータを分割して必要な箇所だけ配信する仕組みです。標準規格なのでフレームワークやアプリケーションを問わず、極地の一部を除く地球全域が常に同じタイルに区分されます。
「この地物ってXYZタイルだとどこに属するんだろう」「日本列島を網羅するXYZタイルの一覧が欲しい」というニーズが、ここ最近の私の中でありましたので、Node.jsモジュールとPythonモジュールのそれぞれのパターンについて本記事で説明します。
なおXYZタイルは、平面に落とした地球を一定のルールで分割しているため、パラメータをもとに計算する事も可能です(参考:[Qiita – 地図タイルの計算まとめ](https://qiita.com/MALORGIS/items/1a9114dd090e5b891bf7))。

## Sample Data 題材
北海道のポ

元記事を表示

http-serverによるローカル HTTPS server 構築 (5分でできる)

# はじめに
https環境でないと動かないJavascript APIなどを試験するのにローカルになんちゃってhttpsサーバが欲しくなった。以下が簡単で最速かなと思ったのでここに記す。

## mkcertのインストール
Macの場合

“`zsh
% brew install mkcert
“`

## CAのインストール(初回のみ)
“`zsh
% mkcert -install
“`

## サーバ証明書、秘密鍵生成
下記コマンドで適当なフォルダに証明書、秘密鍵を生成。mkcertコマンドには証明したいドメインを全て指定。 ローカルネットワークの他PCからもアクセスしたいので、自PCのPrivate Address (e.g. 192.168.11.2)も追加(各自適当に)。

“`zsh
% mkdir ~/cert
% cd cert
% mkcert localhost 127.0.0.1 192.168.11.2
% ls
localhost+2-key.pem localhost+2.pem
“`
## http-serverインストール

“`

元記事を表示

【NodeJS】AWS Lambda+APIGateway+DynamoDBでTODOアプリを作成

## はじめに
サーバーレスを趣味で始めてみたので、勉強がてらAWS Lambda+APIGateway+DynamoDBでTODOアプリを作成し始めました。
個人のメモとして、サーバー側とクライアント側での処理を記事にまとめます。(まだ作成途中です)

## 概要
Lambdaで使用する言語はNode
DynamoDBはidとtodoという項目のみを持ちます。
テーブル名は「todoTable」
今回は、GETとPOSTのみを実装します。

## Lambdaで関数作成
本来であれば1つの関数にまとめたかったのですが、GETメソッドであることをLambdaに渡す方法がわからず、ひとまず関数を分けました。

まずはGETメソッドから。
単純に全てのカラムを取得します。(本来はあまりscanは使わない方がいいらしいが)

“`js
const AWS = require(‘aws-sdk’)
const dynamo = new AWS.DynamoDB.DocumentClient()

exports.handler = (event, context, callback) =>

元記事を表示

Angular9でBootstrap4を使う

# 始めに

– Angular 9系にBootstrap4 (ng-bootstrap) を適用する手順です。

– 通常の Bootstrap(jQuery, popper.js依存)を使用してもよいですが、余計なライブラリに依存することになる事になるため、おすすめしません。
– ng-bootstrapは、Bootstrapが依存しているjQuery, popper.jsの実装をAngularのcomponentに差し替えています。
– メジャーバージョンはしっかりと確認する。
– 特に Angular5 と Angular6+では CLI の設定ファイル周りが大きく変更となっています。

– 公式の英語ドキュメント読むのめんどいって方向け。

# 環境

タイトルにもある通り、今回はAngular9系にBootstrap4を適用します。

“`
$ ng –version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __

元記事を表示

バイナリベクタータイルをGeoJSONにデコードする2つの方法

## Abstract
バイナリベクタータイルの実体は、XYZタイルの位置ごとにサーバーに設置されたPBFファイル群です。PBFファイルはプロトコルバッファと呼ばれる規格で(その詳細は把握していませんが)、GeoJSONをシリアライズしたバイナリデータです。つまり元はGeoJSONなので復元(デコード)可能という事です。今回は2つの手法でGeoJSONへのデコードを試みたいと思います。

## tippecanoe-decode
mapbox社謹製のtippecanoeと言えばバイナリベクタータイルの生成で用いられる有名なライブラリですが、付随して、バイナリベクタータイルからGeoJSONへのデコード機能を持っています。

### Install
“`shell
brew install tippecanoe
“`

### Usage
“`shell
tippecanoe-decode
“`

これが基本形で、特定のsource-layerのみを抽出する事も出来ます。

“`shell:具体例
tippeca

元記事を表示

firebaseでexpress-generatorの起動方法

#1
下記のURLで設定
https://qiita.com/yoshikoba/items/ff7beab24863db804f42

この通りに設定してもエラーが出ました。

#2

package.jsonに

“`javascript
“engines”: {
“node”: “8”
},
“`
を追加。

#3

functionディレクトリ内で

“`shell
npm install firebase-admin
npm install firebase-functions
“`

#4
firebase serveで localhost:5000を開けば
スクリーンショット 2020-04-12 16.41.38.png

表示されます。

元記事を表示

npmのインストール

## npmの2種類のインストール

* ローカルインストール
カレントディレクトリの node_modules 以下にパッケージをインストール。開発プロジェクト固有で依存するパッケージをインストールしたい時に使う。

* グローバルインストール
システム共通の場所にパッケージをインストール。ビルドツールなど、システム全体で利用するツール・コマンド類をインストールしたい時に使う。

## ローカルインストール
* –save
package.jsonのdependencies に追記される。他の人が npm install した時に、dependencies に指定したパッケージが全てインストールされる。

* –save-dev
package.jsonのdevDependencies に追記される。npm install パッケージ名 –dev

* –save-optional
package.json の optionalDependencies に追記される。

## 違い
package.jsonがモジュールとして外部に公開し

元記事を表示

Node Version Manager

## Node.jsのバージョン管理ツール
* node.jsはバージョン依存度が高いため、バージョン管理ツールが必須です。
* 主要なものに「nodebrew」「nvm」などがあります。


## どちらがおすすめ?
nvmのほうが人気です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269452/4f1543c6-a467-a129-0b71-31f06264d4d0.png)


## Cloud9でのNode.jsとnvm
既にプリインストールされています。

“`bash
whitecat:~/environment $ node -v
v10.19.0
whitecat:~/environ

元記事を表示

JavaScriptでのimport/export方法

JavaScriptでは、exportやimportを使って関数やクラスを他のファイルから呼び出し/読み込みすることができますが、いろんな書き方があって何がどう違うのかごちゃごちゃしませんか?
少なくとも私はごちゃごちゃしちゃうので、備忘録も兼ねてまとめたいと思います。

# es2015とNode.jsでの書き方の違い

まず最初の混乱ポイントは、
`export` なのか `exports(module.exports)` なのか?
読み込みは `import`、`require` どっちなの?

めちゃくちゃややこしいですよね。けどこれ実は別物で、
`export/import` は、ES2015(ES6)での書き方
`exports/require` は、Node.js(CommonJS)での書き方なんです。

参考:CommonJSって何?という方は @naoki_mochizuki さんが書かれた [JavaScriptが辿った変遷](https://qiita.com/naoki_mochizuki/items/cc6ef57d35ba6a69117f#commonjs)

元記事を表示

OTHERカテゴリの最新記事