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

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

常に動くLINEBOTにお引っ越し(now編)(未解決版)

前回つまって諦めたnowに再挑戦した記録。

ngrokで作った時の記事:
[WikipediaのAPIを使ってLINEbotに調べてもらう](https://qiita.com/shima-07/items/2322598ca5a40cfee47b)

# はじめに
前回同様、課題感とテーマとしては「ngrokだと使いたいときに使えない!だから常時使えるようにしたい!」です。

目次としては、

* now でだいぶハマる
* さらに now にハマる
* 対応したこと

です。

# nowでだいぶハマる
nowを正しく動かすところでまずハマりました。
いくつかハマった気がして、だいたいはいじったりnow自体を消してやり直したりしたらできた印象だが、うっかりでハマったのがこの記事参照。
https://qiita.com/shima-07/items/64c051c9982ac0899b21

# さらにnowにハマる
無事、ngrokを卒業して、nowを使ってLINE botができました。
が、、
なんか挙動がおかしい。ソースコードはngrokの時と何も変えてないのに。

元記事を表示

nowでアプリケーションエラーが出たとき対応したこと

nowでハマったメモ

# 状況
@n0bisuke の[この記事](https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d#4-now%E3%81%A7%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4)を参考にやっていたつもりがこんなエラーと遭遇。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/a6e72e13-01a8-76ff-1938-0a3c0d247f45.png)

> An error occurred with this application.
> This is an error with the application itself, not the platform.

「nowは問題ないよ。お前のアプリケーション(ソースコード)が問題なんだよ。」とのこと。

# 対応
このnow.json内で指定しているjsファイルの一部を直したら直った。
(記事の例でいくと、se

元記事を表示

typescriptを使ってjavascriptのシンタックスシュガーを理解する

# 背景
typescriptを勉強していて、アロー演算子構文の読み方がわからない。ドキュメントを読んでもよくわからなかった、ということがありました。
そんな時、tscコマンドを使うことで難解なシンタックスシュガーへの理解のヒントになることに気が付きました。
それについて紹介します。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions

たとえば下記アロー演算子の構文がわかりませんでした。

`[‘bbbbb’, ‘3’].map(({ length }) => length)`
仮引数に `{}` 使とは、、、?みたいな感じです。
出力内容から見ると、`length`プロパティを返していることを察することができましたが、いまいち腑に落ちませんでした。

# tscコマンドの出番です
typescriptをjavascritに変更するコマンドが`tsc`です。

“`arrow.ts
[‘bbbbb’, ‘3’].map(({ length }) => l

元記事を表示

【knex】this.dialectに関してのエラー解決

##エラー文
Using ‘this.dialect’ to identify the client is deprecated and support for it will be removed in the future. Please use configuration option ‘client’ instead.

##解決法

“`javascript
var knex = require(‘knex’)({
dialect: ‘mysql’,
connection: {
host: ‘localhost’,
user: ‘root’,
password: ‘(パスワード)’,
database: ‘(データベース名)’,
charset: ‘utf-8’
}
});
“`

上の文の、dialectをclientに変更する。

元記事を表示

Glitchで、ERROR EACCES: permission denied がコンソールに表示され動かないときの対処法

#対処方法
1. Terminalを開く

コマンドライン **(プロジェクトのパッケージが強制的に再インストール コマンド)**

“`javascript
$ enable-pnpm
“`
を実行する。
2. しばらくたつと動く。
3. 以上!!
![glitch.com](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480250/6a98cc76-484e-7f5d-a8b0-daabd9fcfc72.png)

元記事を表示

LINE botから画像送信~問いかけると柴犬の画像を返してくれるLINE botを作ってみた

#概要
 LINE botでできることを調べていたら、画像を返すことが可能とのことで試してみました。
ただ画像を返すだけでは面白くないので、柴犬APIで画像を拾ってきて表示することにしました。最後にソースコードの全体を載せています。

 柴犬APIについては[こちら](https://shibe.online/)をご参照ください。実際の動きは次のようになります。

【デモ】

元記事を表示

Raspberry Pi 4(1台)でKubernetes環境を構築 (Raspberry Pi 4 + Ubuntu 19.10 + MicroK8s) Part2 (Webアプリ編)

# 前回の記事

[Raspberry Pi 4(1台)でKubernetes環境を構築 (Raspberry Pi 4 + Ubuntu 19.10 + MicroK8s)](https://qiita.com/toyotoyo_/items/c58b8d318bee2c735793)

前回の記事では「Raspberry Pi 4」に「Ubuntu 19.10」OSを入れ、「MicroK8s」をインストールし、Kubernetes環境構築と簡単な動作確認するところまで行いました。

![Raspberry Pi 4 組み立て2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397682/fa8653b2-5d60-a561-bcb6-be094b03e084.jpeg)

# 今回の記事

今回の記事では実際にkubernetesのマニフェストファイルを作成し、ラズパイ上でWebアプリケーション(express)を動かしてみたいと思います。
環境については前回の記事まで出来ている前提で進めていま

元記事を表示

LINE BOTで天気を返すサンプルがngrokで動いてnowで動かない件

[こちらのサンプル](https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d)がngrokで動いて、Nowだとうまく動かない件の対応。

axiosを使って別のサーバーにリクエストを出してるので非同期処理のあたりが怪しいですね。

## もとのコード

これだとngrokでうまく動くけど、now上でうまく動かないというレポート

“`server.js


省略

function handleEvent(event) {
if (event.type !== ‘message’ || event.message.type !== ‘text’) {
return Promise.resolve(null);
}

let mes = ”
if(event.message.text === ‘天気教えて!’){
mes = ‘ちょっとまってね’; //待ってねってメッセージだけ先に処理
getNodeVer(event.source.userId); //スクレイピング処理が終

元記事を表示

nowのデプロイで古い書き方からのマイグレートメモ

now.shを使うときにv2系の書き方でも警告が出るようになってますね。
もう1系は使えないのかも。

nowで詰まった人がいたのでメモ。

## 今まで書いてたやり方と修正点

これまでは、これでよかったのですが……

“`now.json
{
“version”: 2,
“name”: “mylinebot”,
“builds”: [{ “src”: “server.js”, “use”: “@now/node” }],
“routes”: [
{ “src”: “/”, “dest”: “server.js” },
{ “src”: “/webhook”, “dest”: “server.js” }
]
}
“`

“`bash
now –target production
“`

> ![](https://i.gyazo.com/9471521a9ad9f3710b3f4c9f9c355aef.png)

### nameプロパティの注意

まずはここ。

“`
❗️ The `n

元記事を表示

JavaScript (Node.js) の非同期処理とシングルスレッド

## 本記事の目的

[JavaScript] や [Node.js] はよくシングルスレッドだ〜、と言われますが、では非同期処理はどうやって実行されているのか ([Non-Blocking I/O]) をざっくりと (私の身内に) 説明する為のサンプルコードです。

> [Node.js], [V8]([libuv]) のコードレベルでちゃんと理解したいのであれば、以下のサイトが大変参考になりました。
>
> * https://blog.hiroppy.me/entry/nodejs-event-loop

## 検証環境

* iMac (Retina 5K, 27-inch Late 2014), 4 GHz Intel Core i7
* [Node.js] v12.13.0

“`shell
$ nodebrew install-binary v12.13.0
$ nodebrew use v12.13.0
“`

> [ブラウザ JavaScript の Event loop](https://html.spec.whatwg.org/multipage/weba

元記事を表示

[Node.JS] StreamAPIを使ったCSVの書き読み出し

今回は、Stream使って配列をCSVにして保存したり、CSVから配列を読み込んだりとかを業務で使ったのでそれの共有です。

####今回やること

– `data.write([‘a’,’b’])`みたいに書いたらファイルに`a,b\n`みたいに追加されて欲しい。
– 逆にファイルに`a,b\n`って書いてあったら、[‘a’,’b’]みたいに1行づつの情報が欲しい。

## そもそもStremAPIとは?

streamAPIの素晴らしさを知らない人のために少し解説します。
すでに使ってる人は飛ばしても大丈夫です。

公式リンク
[Stream API](https://nodejs.org/api/stream.html)
曰く
> streamはデータストリームをするための抽象的インターフェースです。
>> A stream is an abstract interface for working with streaming data in Node.js.

YoutTubeとかでは動画一気に読み込むとクソ重くなるからちょっとづつ読み込むようになっていますが、これがデータス

元記事を表示

Spotify Developer Platform: Spotify APIアクセスしてデータ取得してみてみた

[Spotify](https://ja.wikipedia.org/wiki/Spotify)は2019年現在、2億3,200万人(うち有料会員数1億800万人)のユーザー音楽配信サービスとしては世界最大手で、5000万以上の音楽やコンテンツが揃っていて、ドライブ、エクササイズ、パーティやリラックスタイムなどに、気分に合った音楽、また、友達、アーティストが作ったプレイリストを聴いたりできます。

そんなSpotifyでは Developer Platformが用意されており、Web API、AndroidやiOS向けのSDKなどがあるので、Play ListやTrackに関する詳細な分析データをAPIアクセスしてでデータ取得し分析できます。
ということで、この取得したデータをDatabsaeへ入れて、Analytics, Machine Learning, BIなどData Scienceしてみてみたいので、まずはAPIアクセスしてデータ取得してみてみます。

・参考: [Spotify Developer Platform](https://developer.spotify.c

元記事を表示

PHPファイルをhtml-loaderにかけたときにエラーが出るときの対策

PHPプロジェクトをejs(ejs-html-loader)で管理していて、共通ヘッダーのincludeなど、`?>` で終わらないファイルが存在する場合、**productionビルドでエラーが出る**。

“`
Parse Error:

元記事を表示

Nodeでmultipart/form-dataを送る

`form-data` を使う。

[form-data/form-data: A module to create readable `”multipart/form-data”` streams. Can be used to submit forms and file uploads to other web applications.](https://github.com/form-data/form-data)

## Axios

“`js
const axios = require(“axios”);
const FormData = require(“form-data”);

const form = new FormData();
form.append(“message”, “hello”);

const res = await axios.post(API, form, {
headers: form.getHeaders()
});
“`

## node-fetch

“`js
const fetch = require(“node-fetch

元記事を表示

Node.js Worker Threads: TypeScriptのワーカーを起動する方法 〜ts-node、ts-node-devに対応する方法〜

Node.jsのWorker Threadsは、本物のスレッドプログラミングができます。ワーカーの処理を記述したJavaScriptを与えて、ワーカーを起動するわけですが、TypeScriptのファイルを指定するにはどしたらいいのでしょうか?

## 本稿でわかること

* ts-nodeとWorker Threadsを組み合わせて、TypeScriptのワーカーを起動する方法
* ts-node-devでTypeScriptのワーカーを起動する方法

## 前提知識

本稿を理解するにあたっては、下記の技術についての基礎的な知識が必要です。

* Worker Threads
* 本物のスレッドプログラミングができるNodeモジュール。
* 概要と基礎的な使い方は、次の投稿をご覧ください。
* [Node.js: CPU負荷で3秒かかっていた処理を「Worker Threads」で1秒に時短する – Qiita](https://qiita.com/suin/items/bce351c812603d413841)
* ts-node
* Typ

元記事を表示

重複しない任意長のランダム文字列を生成する方法

## TL;DR
高速で安全、手軽にランダム文字列を生成したいときは[ai/nanoid](https://github.com/ai/nanoid)を使う。

## 特徴
[README.md](https://github.com/ai/nanoid#nano-id)より意訳しています。

– **手軽**:サイズ108bytes (min & gzip)、依存パッケージ無し
– **高速**:[UUID](https://www.npmjs.com/package/uuid)より[40%速い](https://github.com/ai/nanoid#benchmark)
– **安全**:[重複しづらく](https://github.com/ai/nanoid#comparison-with-uuid)、[予測されにくく、偏りが小さい](https://github.com/ai/nanoid#security)
– **短い**:`[a-zA-Z0-9_-]`を使うので生成される文字列を安全に短くできる
– **多言語**:`Node.js`以外にも[14のプログラミング言

元記事を表示

Netlify Functions で API の URL を rewrite する

## はじめに

[Netlify Functions](https://docs.netlify.com/functions/overview/) で作成する API の URL 形式を 初期設定の `/.netlify/functions/example?hoge=10` のような形から `/example/10` 形式に rewrite する方法です。

## netlify.toml の指定

Netlify ではプロジェクトのルートに配置する `netlify.toml` で redirect を指定することができます。また、`status` を `200` に設定すると redirect ではなく rewrite として機能します。

> [Rewrites and proxies](https://docs.netlify.com/routing/redirects/rewrites-proxies/)
>
> When you assign an HTTP status code of 200 to a redirect rule, it becomes a rewri

元記事を表示

MERNスタックをDockerでやっていく

### はじめに
30代正社員経験のないクズ人間だけどSHUSHOKUできました!やったー!
うれC!!!!!!!!うれC!!!
MERNスタック使って、ポートフォリオ用にWebアプリ作ってみたけど、大変だった気がします。正直全部大変だし難しいし自分が何やってるかよくわからない感じになります。頭が悪いので整理ができない……(´・ω・`)
DockerでMERNスタック環境構築したらDocker使っちゃう気持ちもアゲアゲでいけるのでは?などと考え、あとからECRやら楽なんじゃね?とか思っていた時期が自分にもありました。

MERNスタックでなんかDockerもつかって気軽に色々できればいいなあというわけで、今後忘れないように書いておこうと思います。

Dockerについては、「[何故Dockerなのか](https://www.docker.com/why-docker)」とか、なんか公式読めば良いとかいう風潮がある気がします。
公式は字が多すぎて読む気がおきないみたいなやつはあります。でも、読め!とインターネッツの中の人たちが言ってくるので読みました。読んでもよくわからないので、脳

元記事を表示

途中で戻したり進めたりできるイテレータ

構文解析する際に、文字列イテレート中に戻したりスキップしたりできるイテレータがあれば便利かと思い作ってみました。
参考: https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators

“`js
function iter(pattern) {
let index = 0
return {
[Symbol.iterator]: function() {
return this
},
next: function() {
if (index < pattern.length) { return { value: pattern[index++], done: false } } else { return { done: true } } },

元記事を表示

Node.jsをChrome DevToolsでデバッグする方法

Node.js は標準で Chrome DevTools と接続しデバッグする機能が付いています
普段から使っている Chrome DevTools と同じ感覚で使えます
ヒープメモリのスナップショットも取れるためメモリリーク調査にとても便利だったのでやり方をまとめておきます

## 対応バージョン
– node v6.3.0以上

## やり方

### 1. node を `–inspect` オプションをつけて起動する
“`shell
node –inspect index.js
“`

### 2. Chrome で `chrome://inspect` を開く
こんな画面が開きます
うまく動いていると Remote Target の下に認識しているアプリケーションが表示されます
スクリーンショット 2020-04-01 17.59.04.png

  • OTHERカテゴリの最新記事