20210119のNode.jsに関する記事は5件です。

node.jsやnodebrewなどをインストールし.bash_profileで設定完了→次の日できなくなってたの巻/Mac OS X 10.15

正確には次の日ではなくターミナル落として再度開いたら、でしたが、、
mac OS 10.15での環境構築のお話です。
nodeやnodebrewをインストールし、bash_profileに環境設定pathを通します。

homeの中の「.bash_profile」 ファイルには

export PATH=/usr/local:$PATH
export PATH=$HOME/.nodebrew/current/bin:$PATH

と記述済み。念のためターミナルでも

export PATH=$HOME/.nodebrew/current/bin:$PATH

と実施。

で、ターミナルで
node -v
などを実行してちゃんとバージョンが見れておりました。

ーーーーーーーーー

が、時間を開けてもう一度ターミナルを開き、同じ操作をすると
「zsh: command not found: node」となります。

export PATH=$HOME/.nodebrew/current/bin:$PATH

をターミナルで実行すると動作するため、データは入ってはいるよう。

少しはまりましたが、ターミナルにあるようにシェルが「zsh」というバージョンのため、
.bash_profileに書いたものは無効になってしまいます。
この場合、このファイル名をそのまま.zprofileに名前変更すればうまくいきます!
(またはbashに戻す方法でもよし)

macでは、10.15以降デフォルトでシェルがzhsに変更されております。
理由なんかも合わせてさがすと参考にになりました!
https://www.infoq.com/jp/news/2019/07/macos-ditches-bash-for-zsh/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Node.js]docker-compose upで気楽に開発環境構築

前提

  • 筆者はMac環境(試してないがWindowsでも動くと思う)
  • dockerコマンドが使える状態
  • npmコマンドが使える状態
  • nodeコマンドが使える状態
  • Dockerの基本的知識(イメージやコンテナの概念)を有する

対象

  • 環境構築を手っ取り早くしたい人
  • Node.jsをdockerで動かしたい人

環境

bash
$ docker -v
Docker version 20.10.2, build 2291f61

$ npm -v
6.14.5

$ node -v
v13.11.0

$ pwd
~/{project_name}

ファイル構成

project
{project_name}
 ├─ node_modules
 |   └─ ...
 ├─ src
 |   └─ index.js
 └─ docker-compose.yml
 └─ Dockerfile
 └─ package.json
 └─ package-lock.json

node_modulesの中身は割愛

Dockerfileの設定

基本的にはこちらの公式ドキュメント通りにやれば良いが、楽に開発したいたので修正する

{project_name}/Dockerfile
FROM node:12

# アプリケーションディレクトリを作成する
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Dockerfileが置かれているディレクトリ以下をコピー
ADD . /usr/src/app

# アプリケーションの依存関係をインストールする
COPY package*.json /usr/src/app
RUN npm install
# 本番用にコードを作成している場合
# RUN npm install --only=production

# アプリケーションのソースをバンドルする
COPY . /usr/src/app
  • FROM node:1212の部分はこちらを参考に自身の好きなバージョンで!
  • WORKDIR /usr/src/app:dockerコンテナの作業ディレクトリを指定
    (変更する場合はDockerfileと後に紹介するdocker-compose.ymlに書かれた/usr/src/appを全て変更する必要あり)

docker-compose.ymlの設定

{project_name}/docker-compose.yml
version: '3'
services:
  app:
    build: .
    command: bash -c 'node src/index.js'
    image: node_test
    volumes: .:/usr/src/app
    ports: "8080:8080"
    tty: true
  • command: bash -c 'node src/index.js'docker-compose upコマンドでコンテナ起動の際に呼ばれるコマンド
  • image: node_test:image名は任意で変更(分かりやすいプロジェクト名とか)
  • volumes: .:/usr/src/app:ローカルのファイルとdockerコンテナ内のファイルを同期させる
  • ports: "8080:8080":ローカルとコンテナ両方とも8080番ポートを使用
  • tty: truedocker-compose upでコンテナが終了しないようにする

(index.jsの設定)

基本的に自身の環境による
以下はこちらの雛形

'use strict';
const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

起動

bash
$ docker-compose up

Have fun !!

※ イメージができてない場合、コンテナ起動までに時間がかかる

参考文献

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Azure IoT Hub に Node.js で subscribe

Ubuntu 20.10 で確認しました。

azure_subscribe.js
#! /usr/bin/node
// ---------------------------------------------------------------
//  azure_subscribe.js
//
//                  Jan/19/2021
//
// ---------------------------------------------------------------
'use strict'

const { EventHubConsumerClient } = require("@azure/event-hubs");

const eventHubsCompatibleEndpoint = "sb://ihsuprodkwres017dednamespace.servicebus.windows.net/"

const eventHubsCompatiblePath = "iothub-ehub-iot-aa-344012-58f0095d47"

const iotHubSasKey = "QThy0z2eiCOzKcv2Ni5DZCnHL8Gtabcdefghd4pj5D4="

const connectionString = `Endpoint=${eventHubsCompatibleEndpoint};EntityPath=${eventHubsCompatiblePath};SharedAccessKeyName=service;SharedAccessKey=${iotHubSasKey}`;

var printError = function (err) {
  console.log(err.message);
};

var printMessages = function (messages) {
  for (const message of messages) {
    console.log("Telemetry received: ");
    console.log(JSON.stringify(message.body));
    console.log("");
/*
    console.log("Properties (set by device): ");
    console.log(JSON.stringify(message.properties));
    console.log("System properties (set by IoT Hub): ");
    console.log(JSON.stringify(message.systemProperties));
    console.log("");
*/
  }
};

async function main() {
  console.log("IoT Hub Quickstarts - Read device to cloud messages.");

  const clientOptions = {
  };

  const consumerClient = new EventHubConsumerClient("$Default", connectionString, clientOptions);

  consumerClient.subscribe({
    processEvents: printMessages,
    processError: printError,
  });
}

main().catch((error) => {
  console.error("Error running sample:", error);
});

// ---------------------------------------------------------------

必要な値の取得方法

Event Hub-compatible endpoint

az iot hub show --query properties.eventHubEndpoints.events.endpoint --name {
your IoT Hub name}

Event Hub-compatible name

az iot hub show --query properties.eventHubEndpoints.events.path --name {your
 IoT Hub name}

Primary key for the "service" policy to read messages

az iot hub policy show --name service --query primaryKey --hub-name {your IoT
 Hub name}

Portal にアクセスして、connectionString を読み取ることもできます。
「イベントハブ互換エンドポイント」になります。
iothub_endpoint_jan20.png

実行コマンド

export NODE_PATH=/usr/lib/node_modules
./azure_subscribe.js

参考ページ
Hub からテレメトリを読み取る

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Express Tour #2 Express application generator

素早くExpressアプリケーションのスケルトンを作るために、express-generatorを使いましょう。

検証環境

lubuntu 20.04
node.js 14.15.3

express-generator のインストール

まず下記コマンドでexpress-generatorをグローバルインストールします。

$ npm install -g express-generator

アプリの作成

次にアプリケーション用のディレクトリを作ってそこに移動しましょう。

$ mkdir exg-test
$ cd exg-test

express -h コマンドを打つと各オプションについて確認できます。

$ express -h

実行結果

  Usage: express [options] [dir]

  Options:

        --version        output the version number
    -e, --ejs            add ejs engine support
        --pug            add pug engine support
        --hbs            add handlebars engine support
    -H, --hogan          add hogan.js engine support
    -v, --view <engine>  add view <engine> support (dust|ejs|hbs|hjs|jade|pug|twig|vash) (defaults to jade)
        --no-view        use static html instead of view engine
    -c, --css <engine>   add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css)
        --git            add .gitignore
    -f, --force          force on non-empty directory
    -h, --help           output usage information

デフォルトではviewエンジンとしてJadeがインストールされるのでJadeを使いたくない方はオプションを指定してあげる必要があります。
(cssのデフォルトは普通のcssです。)

例として、viewエンジンにEJS, stylesheetエンジンにsassを指定したい場合は以下のコマンドで作成します。

$ express --view=ejs --css=sass

以下のような構成でアプリが作成されます。

 ./
 ../
 app.js
 bin/
 package.json
 public/
 routes/
 views/

依存関係のインストール

npm install で依存関係のあるライブラリをインストールします。

$ npm install

アプリの起動

以下のコマンドを打つと htttp://localhost:3000/ でアプリが起動します。

$ npm start

参考

https://github.com/expressjs/generator#readme

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node.jsをWindows10にインストールして詰まったこと

背景

AWSでNode.jsを触ってみようと思い立ち、まずはAWSの開発者ガイドに従って開発環境を構築してみた。

参考にしたURL

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/nodejs-devenv.html
https://qiita.com/taiponrock/items/9001ae194571feb63a5e

詰まったこと

 Node.js&npmをインストールしたので、動作確認(npm start)するとエラーが出てしまった。

node:internal/modules/cjs/loader:928
  throw err;

Error: Cannot find module 'http-errors'
Require stack:
- hoge\app.js
- hoge\bin\www

エラーの出た環境

 OS:Windows10 Pro(バージョン2004 OSビルド19041.746)
 node.jsインストーラ:node-v15.6.0-x64.msi

調べてみた

どうも、Node.jsのインストールは一発目は失敗することが多い模様。(Windowsだから?)

参考にしたURL

https://github.com/nodejs/help/issues/2644
https://qiita.com/Sakuya_wd/questions/9d2af3b47047aad652fc

確認してみた

同じようなトラブルに見舞われているところでは、node_modulesフォルダを消して再インストールするという解決策が提示されていた。
まず、インストールフォルダを確認したところ、自分の環境ではnode_modulesフォルダが存在していなかった。

やってみた

node_modulesフォルダがもうないんだから、そのまま再インストールをやってみる。

npm install

警告は出るけど、エラーは出てないっぽいから、改めて動作確認をした。

npm start

> node-express@0.0.0 start
> node ./bin/www

GET / 200 1701.982 ms - 170
GET /stylesheets/style.css 200 9.003 ms - 111
GET /favicon.ico 404 33.771 ms - 1132

今度はちゃんとサンプルコードが動いた。
インストーラーからだとモジュール類がちゃんと入らないってことなのかな?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む