Node.js関連のことを調べてみた2021年01月26日

Node.js関連のことを調べてみた2021年01月26日

mongoDBで複数行をインクリメントしたい時

今回は、1つのステートメントで1つのドキュメントに対して複数のmongo更新をする話について紹介します。
(mongo2.4環境)

例えば、カラムaとカラムbの複数行のレコードを`inc`値だけ増やしたい時。

“`
db.test.update({“name”:”sample_data”},
{$inc:{a:inc}, $inc:{b:inc});
“`

このようにして書くと、bの数値だけ増加します。
複数$incを付けた場合、最後のステートメントだけ反映される仕様のようです。
以下のようにして解決します。

“`
db.test.update({“name”:”sample_data”},
{$inc:{a:inc, b:inc});
“`

これで、aとb両方の数値がインクリメントされます。

なお、「この値は増加させて、このフィールドをセットして…」と、`$inc`と`$set`を組み合わせる場合もあるかと思います。
その場合は、*ドキュメントの異なる部分に影響を与える場合は、複数の更新を組み合わせることができます*。

“`
db.t

元記事を表示

Node.jsの基礎

![img01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618885/e117f78f-3f1b-386f-e7eb-cff9dc6e5217.png)

# Node.js

### イベントループによる並行処理
Node.jsの第一の特徴としてあげられるのは、並行処理をマルチスレッドではなくイベントループによって実現するというものです。イベントループは単一のスレッド(シングルスレッド)で動作するため、マルチスレッドのようなリクエスト数の増大に伴う問題が起きづらくなっています。
 イベントループは実行すべきタスクをキューに積み、これを1つづつ取り出してシングルスレッドで実行していきます。逐次処理のようですが、これで並行処理を実現できるのは、ここでのタスクが一連の処理をI/Oの発生するタイミングを境に分割した物だからです。プログラムはI/O実行時にその完了後のタスクを指定し、実際にI/Oが完了すると指定されたタスクがキューに追加されます。

# Ecmascript, Web標準
JavaScri

元記事を表示

node.jsでgoogleapiのリダイレクトURIに任意の文字列(state)を追加する方法

#この記事について
バックエンドで Google API を使っています。
言語はNode.jsで書いています。
Google APIの使用には、[Google APIs Node.js Client](https://googleapis.dev/nodejs/googleapis/latest/calendar/index.html)
を使っています。

今回は、Google APIのユーザー認証後のリダイレクトURIに任意の文字列を指定する方法を記載します。

#事前準備
GCPコンソールにてGoogleプロジェクトを作成し、認証情報を作成し、何かしらのAPIを有効化しておいてください。
↓GCPコンソール(developers)
https://console.developers.google.com/apis

#やり方
リダイレクトURLに任意の文字列を含めたい場合は、__state__パラメータを認証URLに含めることで可能です。
https://developers.google.com/identity/protocols/oauth2/web-server#re

元記事を表示

今までに私が遭遇したgulpエラーの解説と解決方法まとめ

今回は私がgulpなどを触っていくなかで、発生したgulpエラーとその解決方法についてまとめました。
同じようなエラーに遭遇された方で、エラー解消の一助になれば幸いです。

参考にしたサイトのURLも一緒に載せておきます。

それでは早速いきましょう。

**【目次】**

+ **1 Error: Cannot find module ‘gulp-sass’**
+ **2 Error in plugin “gulp-imagemin”**
+ **3 Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (88)**
+ **4 Error in plugin “gulp-imagemin”**
+ **5 SyntaxError: Identifier ‘<変数名>‘ has already been declared**
+ **6 ERR! missing script: start**
+ **7 Er

元記事を表示

Node.js 特定の値が含まれているJSONファイルを振り分ける

エンタメ系企業の社内もろもろを担当しているakibinです。

[Twitterアカウント](https://twitter.com/akibinmusic)
[Youtubeチャンネル](https://www.youtube.com/channel/UC-JOpwEnJn3gCrUA4NdCYgg)

最近、[Shuta Hasunuma Philharmonic Orchestra / HOLIDAY feat. Moeka Shiotsuka](https://www.youtube.com/watch?v=MZ6rCoJGTdA)にハマってます。春らしくて春が待ち遠しくなりますよ寒いの飽きたよいいかげんにしてほしい。

# 概要
Node.jsで特定の値が含まれているJSONファイルをピックアップして、他のディレクトリにコピーしました。
なぜかと言うと、Markdown形式のWikiアプリから他のアプリに移行するのに、特定の値から移行したいJSONファイルを振り分ける必要があったからなのです。

# そのもの
今回はJSONファイルのgroupsという項目の中のIDが”111

元記事を表示

フレームワークexpressのインストールと起動

#初めに
以下コマンドでコンソール起動

“`
vagrant up
vagrant ssh
“`

#次に
以下コマンドで Express application generatorをインストール

“`
yarn global add express-generator@4.16.0
“`

#最後に

以下コマンドでファイルでファイル作成
hoge部分はファイル名

“`
express –view=pug hoge
“`

以下コマンドでPORT=8000で起動
http://localhost:8000/ にアクセスすると開ける

“`
yarn install
DEBUG=hoge:* PORT=8000 yarn start
“`

元記事を表示

Puppeteerで3rd-party cookieを保存・利用する

Puppeteerで3rd-party cookieを保存・利用したい場合の処理についてまとめました。ログイン処理がクロスサイトになっているWebページをPuppeteerで利用する場合など、以下で紹介するコードが必要になることがあります。

## cookieのセーブ

cookieを保存するファイルをtmpdirに作る方針のコードです。別のパスに保存する場合はよしなに変更してください。

“`javascript
const os = require(‘os’);
const path = require(‘path’);
const fs = require(‘fs’).promises;

/*(中略)*/

try {
const client = await page.target().createCDPSession();
const allBrowserCookies = (await client.send(‘Network.getAllCookies’)).cookies;
const cookiePath = path

元記事を表示

nodenvでNode.jsをバージョン管理

※この記事はMacOSを前提として書かれています。
※Windowsの場合は、「[nodistでNode.jsをバージョン管理](http://qiita.com/satoyan419/items/56e0b5f35912b9374305)」を参照してください。

# nodenvの環境の準備

[nodenv](https://github.com/nodenv/nodenv)を使ってNode.jsのインストールやバージョン管理をおこないます。

## nodenvのインストール

まず、ターミナルで以下のコマンドを実行します。

“`:ターミナル
git clone https://github.com/nodenv/nodenv.git ~/.nodenv
“`

次に以下のコマンドを実行します。このコマンドで失敗しても、`nodenv`は正常に動くので大丈夫です。[^1]
[^1]: [GitHub – nodenv/nodenv: Manage multiple NodeJS versions.](https://github.com/nodenv/nodenv#basi

元記事を表示

フロントサーバ、バックサーバの分離された構成でミニマムなサービスを作る。

# はじめに
本記事はモノリシック**でない**分離されたアーキテクチャ(マイクロサービス)について理解を深めるため、
ミニマムなアプリを作ってみたときのまとめ記事です。
※当方初心者のため、間違いありましたら是非ともご指摘お願いいたします。

## 著者について
以下著者のスペック

– エンジニア一年目
– WebアプリといえばMVCしか知らない
– マイクロサービス?なにそれおいしいの

## 背景
基本情報などの勉強中、よくこんな図が出てきて混乱していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290859/dc183023-3b4a-1083-0e57-355bbfeaf9b1.png)

– Webアプリのアーキテクチャ?、MVCしかしらんけど?
– アプリのサーバって一つだけじゃないの?
– でもReactとかは独立してサーバーが立っているぽい、、
– どうやってバックエンドと連携させるんやろ、、?

このような疑問を持った私は、「わかんないなら触ってみればい

元記事を表示

Node.js on Raspberry Pi Zero WHのはまりどころ

# 概要
Raspberry Pi Zero WH上にNode.jsの実行環境を構築しました。
やりたいことは**Raspberry Pi Zero上での形態素解析と画像生成**です。

しかしRaspberry Pi Zero WHはARMv6コア、RAM512MBと最小限のアーキテクチャです。
リッチなことをやろうとすると一筋縄ではいきません。
色々工夫して何とか実行環境を構築できました。

その時のはまりどころを情報共有します。

# Agenda
主に以下3つではまったので、それぞれを説明します。
1. ARMv6コア起因
2. RAM不足起因
3. ライブラリ不足起因

# はまったところ
## 1. ARMv6コアによるnpmエラー
Raspberry Pi ZeroはARMv6コアを実装しています。
v6コアは2000年代前半のアーキテクチャでちょい古です。
なので、

* apt/apt-getのインストールしてもnpmがエラーを吐く
* スクリプトを使わず手動でインストールしようにもNode.js公式のTOPではv7以降しか載っていない

よって過去のdistを

元記事を表示

Reactでの認証時にJWTをCookieに設定する方法

SPAでの認証といえばJWTを使うことが多いと思いますが、
localStorageに保存するとセキュリティリスクが高いとかで、
CookieにHttpOnlyな値として保存するのが良いとしばしば言われることもあります。
今回はReact × ExpressでJWTをCookieに保存する具体的な方法を紹介します。

(そもそもJWTを使うべきかとか、localStorageを使うことのリスクなどについては要件次第なのであまり言及しません)

調査にあたっては以下の記事を参考にしました。
[React Authentication: How to Store JWT in a Cookie](https://medium.com/@ryanchenkie_40935/react-authentication-how-to-store-jwt-in-a-cookie-346519310e81)

記事の方法そのままでは自分の環境では上手くいかなかったので、ハマりポイントも含めて手順を解説します。

# 最終的に出来上がったもの

– **JWTをCookieに保存する**
https:/

元記事を表示

node.jsの基本

node.jsは僕にとってはじめてお金を稼げた言語でとても特別なものなのですが、仕様を端から端まで熱心に勉強したわけではなく、壁にぶつかってはググっての繰り返しで身につけたので自分の理解をちゃんと整理するための備忘録として、また初学の人たちへ少しでも役に立てばとまとめました。

#node.jsとは
node.jsはサーバーサイドのイベント駆動型JavaScript環境です。イベント駆動型というのは、プログラムの実行から何かしらが起きるまで待機して、起きた事物が規定の条件を満たしたときに指定された命令を実行するプログラミングの概念です。node.jsはJavaScriptを用いてPHPやPythonなどで書くようなサーバーサイドアプリケーションを作成することができます。

#Hello World

node.jsにおける最も基礎的なHello Worldです

“`javascript:server.js
const http = require(‘http’)
const port = 3000
const hostName = “127.0.0.1”
const headers

元記事を表示

discord.jsでメンションするとmp3ファイルを再生するbot

## はじめに
実装/実行環境: glitch.com : https://glitch.com/
定期bot監視: UptimeRobot : https://uptimerobot.com/
開発環境: Node.js
discord API: v12

botの作成等はこちらの記事を参考にしてください(コーディング部分以外)
https://note.com/bami55/n/ncc3a68652697#KRily

この記事の現バージョンより古いコードや、今回作成するbotのための追加作業を敵船説明していきます。
※ botの招待でURLの作成時にパーミッションをAdminにするのは嫌!!という方は、
  下記画像のようにBOT PERMISSIONSを設定してください
![disco.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1049024/74e5d228-6501-d23e-1169-20dd4e304f19.png)

・View Channels: プライベート

元記事を表示

Node.js + Spring BootでTOTP認証を実装してみた

少し暇な時間ができたので気まぐれにTOTP(Time-based One-Time Password)認証を実装してみた。
TOTP認証に関しては今更言うまでもないが、時間限定の一時パスコードにより二段階認証である。代表的なアプリとしては、Google AuthenticatorやMicrosoft Authenticatorがある。

念のため、TOTP認証における認証の流れ/アルゴリズムは以下の通り。

**TOTP生成アルゴリズム :**
1. 現在時刻(UNIXタイムスタンプ)/有効期限(秒)の値をクライアント/サーバの双方で保持している秘密鍵でHMAC値を算出
2. 「1.」でHMAC値における20文字目の値から、下位4ビットを取り出す。言い換えれば、20文字目のビットに「00001111」とAND演算を実施
3. 「2.」で算出した値を10進数変換し、当該値をoffsetとする
4. 「3.」で取得したoffsetの値から4文字分「1.」で算出したHMACから切り出す
5. 「4.」で取得した値に4文字分(=31ビット)に対して、31ビットなので「0x7FFFFFFF」と

元記事を表示

laravel-mixのコンパイルでSyntaxError: Unexpected token = と怒られたら

# 発生したエラー
laravel-mixでコンパイルしたところ下記のエラーで怒られた
触ってないファイルでsyntax errorとか言われて困った

“`shell-session:ubuntu
# npm run dev
npm WARN npm npm does not support Node.js v10.23.1
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can’t make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8, 9.
npm WARN npm You can find the latest version at https://nodejs.org/

> @ dev /var/www/vue-laravel-spa

元記事を表示

Node.js: Let’s Encrypt の証明書を使ったブローカーに接続

こちらで作成したブローカーに接続する方法です。
[Mosquitto で Let’s Encrypt の証明書を使う](https://qiita.com/ekzemplaro/items/d2afb5d421c7d4d457c2)

“`text:.env
HOST=abc.example.com
TOPIC=sensors/topic_1
“`

“`js:publish_ca.js
#! /usr/bin/node
// —————————————————————
// publish_ca.js
//
// Jan/23/2021
//
// —————————————————————
‘use strict’
const mqtt = require(‘mqtt’)
const fs = require(‘fs’)
const dotenv = require(‘dotenv’)
// —–

元記事を表示

Cloud Functions for Firebase で runtime を Node.js 12 にしてデプロイする方法

# はじめに
Cloud Functions for Firebase でデプロイの際にnodeのバージョン周りでエラーが出てハマったのでまとめました。
簡潔に設定の仕方を紹介した後、ハマりどころを末尾に記載しておきます。

# runtime を Node.js 12 にしてデプロイする方法
やり方は全部で2つあります。

## 1. package.jsonに記述する方法
以下のようにenginesに”node”:”12″と記載する

“`json
{
“name”: “functions”,
“description”: “Cloud Functions for Firebase”,
“scripts”: {

},
“engines”: {
“node”:”12″
},
“dependencies”: {

},
“devDependencies”: {

},
“private”: true
}
“`

## 2. firebase.jsonに記述する方法
firebase functions をi

元記事を表示

Node.jsがとっつきにくい言語だと思ったら ~非同期処理とは?~【初心者向け】

##背景
JavaやらPythonやらの言語でエンジニア人生を送っていると、Node.jsは「何か違う~!!」と思う言語だと思う。今回はどんなところがとっつきにくい点なのか、他の言語と何が違うのかを書いていく:runner_tone5::thought_balloon:

##Node.jsってどんな言語?
Node.jsは他の言語と比べて決定的に異なる点がある。「ノンブロッキングI/O」という処理方式を採用している点だ。ブロッキングとは、Node.jsのプログラムを実行する際に、ファイル呼び出しやネットワークリクエストなどNode.js以外の操作が完了するまで待たなければならない状態だ。ブロッキングが発生すると、プログラムの次の処理に進むことができない。Node.jsでは、このブロッキングを避けるため「ノンブロッキングI/O」という非同期処理を採用している。ファイル呼び出しやネットワークリクエストの処理の結果を待たずに次のプログラムコードが実行される。

“`
const fs = require(‘fs’); // ファイル読込ライブラリ

// ファイル内容をコンソールに出力す

元記事を表示

node.jsのローカルサーバーでクライアントサイドjavascriptが動かない

# はじめに
* 素人がタイトルの問題で詰まったので解決方法を残しておきます
* 解決方法の一つは@Suibari_chaさんの記事を大いに参考にさせてもらいましたが(ほぼそのままです)、「javascriptが動かない」でググると見つけづらかったので一応記載させていただきました

# 解決方法1
下記記事のSuibari_chaさんのcssを読み込む方法:[Node.jsでhttpサーバを立てた際にCSSが読み取れない場合の対処法について](https://qiita.com/Suibari_cha/items/48da8519d6f363925b6a)

と同様に、javascriptのMIMEタイプを指定します。
サーバー起動時に「.jsはJavaScriptとして扱う」
というのを教えてあげないといけないということみたいです。
(node.jsなんだからそれくらいデフォルトで分かってくれよと思いますけども)

# 解決方法2
expressを使います

まず、expressをインストール

“`
npm install express
“`

下記のサーバー起動のスクリプト

元記事を表示

Docker x Express x PostgreSQL x Sequelize 環境構築メモ

検索したら意外とヒット少なかったので記事化

**初学者ゆえ適切でないコードや表現があるかと思います。その際は優しくご指導いただけますと幸いです。**

## 開発環境
– macOS Catalina 10.15.7
– Docker 20.10.2

## 作業ディレクトリ作成
“`zsh:Terminal
mkdir hoge/app
cd app
npm init
“`
適当な場所に作業ディレクトリを作成&`npm init`
package nameとかは適当なものを選択。

## server.js作成
“`zsh:Terminal
touch server.js
npm i –save express
“`
“`js:server.js
const express = require(“express”);
const app = express();

app.get(“/”, (req, res) => {
res.send(“Hello World!”);
});

app.listen(9000, () => {
console.log(“

元記事を表示

OTHERカテゴリの最新記事