20210513のNode.jsに関する記事は2件です。

【Node.js】ダウンロードアプリ版のアンインストール、nvmでの再インストール(mac版)

Node.jsのインストールはどのように行いましたか? 公式サイトからアプリをダウンロードしてインストールするのは簡単な方法ですが、あまりオススメしません 理由はバージョンコントロールが面倒になるからです。nvmまたはnodebrewを使ってインストールする方法がオススメです。 既にダウンロードアプリ版でNode.jsをインストールしてしまった方向けに、 既存のNode.jsのアンインストールから、nvmで再インストールする方法について紹介します。 Node.jsのアンインストール npmのアンインストール npmのアンインストール npm uninstall -g npm ホームディレクトリに移動して.npmフォルダの削除 cd ~ rm -rf .npm nodeコマンドのフルパスを探してこちらも消しておく which node rm -rf /usr/local/bin/node 消えていることを確認 (いずれも-bash: **: command not foundとなる) node -v npm -v nvmを使ったNode.jsの再インストール nvmのインストール curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 13527 100 13527 0 0 45392 0 --:--:-- --:--:-- --:--:-- 45240 => Downloading nvm from git to '/Users/***/.nvm' => Cloning into '/Users/***/.nvm'... remote: Enumerating objects: 286, done. remote: Counting objects: 100% (286/286), done. remote: Compressing objects: 100% (252/252), done. remote: Total 286 (delta 32), reused 110 (delta 21), pack-reused 0 Receiving objects: 100% (286/286), 146.78 KiB | 514.00 KiB/s, done. Resolving deltas: 100% (32/32), done. => Compressing and cleaning up git repository => Appending nvm source string to /Users/***/.bash_profile => Appending bash_completion source string to /Users/***/.bash_profile => Close and reopen your terminal to start using nvm or run the following to use it now: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion .bash_profileに追加されていることが確認できたらコマンドの有効化 source ~/.bash_profile nvmのバージョン確認 nvm --version 0.35.0 Node.jsのバージョン確認 nvm ls-remote ... v14.15.4 (LTS: Fermium) v14.15.5 (LTS: Fermium) v14.16.0 (LTS: Fermium) v14.16.1 (LTS: Fermium) v14.17.0 (Latest LTS: Fermium) v15.0.0 v15.0.1 v15.1.0 v15.2.0 v15.2.1 v15.3.0 v15.4.0 v15.5.0 v15.5.1 v15.6.0 v15.7.0 v15.8.0 v15.9.0 v15.10.0 v15.11.0 v15.12.0 v15.13.0 v15.14.0 v16.0.0 v16.1.0 バージョンを選択してインストール(必要に応じて複数バージョンをインストール) nvm install v14.17.0 インストールされたバージョンの確認 nvm ls v12.22.1 v14.17.0 -> v16.1.0 default -> v14.17.0 node -> stable (-> v16.1.0) (default) stable -> 16.1 (-> v16.1.0) (default) iojs -> N/A (default) unstable -> N/A (default) lts/* -> lts/fermium (-> v14.17.0) lts/argon -> v4.9.1 (-> N/A) lts/boron -> v6.17.1 (-> N/A) lts/carbon -> v8.17.0 (-> N/A) lts/dubnium -> v10.24.1 (-> N/A) lts/erbium -> v12.22.1 lts/fermium -> v14.17.0 使用するバージョンを選択(必要によって切り替え) nvm use v14.17.0 バージョンが切り替わっていることを確認 node -v v14.17.0
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PharoからOracle/MySQLに接続するnode.jsのapiサーバーを構築する

はじめに いままでSqueak4.4とPharo7でWebアプリサーバーを構築していましたが、DBXTalkのインストールが失敗するためOracleデータベースへの接続にはperlのDBI/DBDライブラリを利用していました。 ただし、perlを呼ぶOSProcessはWindowsでは動かないためLinux版Pharoでしか開発/テストが出来ず、WindowsPCで開発してLinuxサーバーで運用というスタイルが取れないのがこれまでの悩みでした。 今回Pharo8へのマイグレーションを行う際に、データベースへのアクセスをnode.jsに代行させるようにしたらすべて解決出来たので共有します。 ついでにMySQLの接続もサポートしました。 概念図 PharoでSeaside3をWebサーバーとして起動します。 node.jsはapiサーバーとして機能します(今回はWindows10PCに立てましたがWindowsでもLinuxでも好きな環境に立てて下さい) ソースコード node.js server.jsはサーバーとしてポート3000をリッスンして起動します。 運用環境ではpm2で自動起動するといいと思います。 server.js let restify = require("restify"); let server = restify.createServer(); server.use(restify.plugins.bodyParser()); const oracledb = require("oracledb"); const mysql = require("mysql"); const util = require("util"); let pool; const init = async () => { try { await oracledb.createPool({ user: "admin", password: "pass", connectString: "oracle.example.com/example", poolMax: 4, poolMin: 0 }); console.log("Connection pool started"); pool = mysql.createPool({ host: "localhost", user: "admin", password: "pass", timezone: "jst", multipleStatements: true }); } catch (err) { console.error("init() error: " + err.message); } } const execOracle = async (sql, binds, options) => { let connection; try { connection = await oracledb.getConnection(); const result = await connection.execute(sql, binds, options); return result; } catch (err) { console.error(err); } finally { if (connection) { try { await connection.close(); } catch (err) { console.error(err); } } } } const execMysql = async (request) => { pool.query = util.promisify(pool.query); try { const result = await pool.query(request); return result; } catch (err) { throw new Error(err); } } const closePoolAndExit = async () => { console.log("\nTerminating"); try { await oracledb.getPool().close(10); console.log("Pool closed"); pool.end(); process.exit(0); } catch (err) { console.error(err.message); process.exit(1); } } (async () => { try { server.post("/oracle", async (req, res, next) => { const request = JSON.parse(req.body.request); const sql = request.sql; const binds = request.binds; const options = request.options; const result = await execOracle(sql, binds, options); res.json(result); return next(); }); server.post("/mysql", async (req, res, next) => { const request = JSON.parse(req.body.request); const result = await execMysql8(request); res.json(result); return next(); }); process.once("SIGTERM", closePoolAndExit).once("SIGINT", closePoolAndExit); await init(); server.listen(process.env.PORT || 3000, function() { console.log("Server started."); }); } catch (err) { console.error(err); } })(); Smalltalkライブラリ Pharoに以下のライブラリをロードします SeasideとNeoJSONのインストール Metacello new baseline:'Seaside3'; repository: 'github://SeasideSt/Seaside:master/repository'; load. Gofer it smalltalkhubUser: 'SvenVanCaekenberghe' project: 'Neo'; configurationOf: 'NeoJSON'; loadStable. Pharo テストで使用したコードは以下の通りです。 実際に使う際にはラッパークラスを作って運用することになると思います。 apiサーバーからはJSONでデータが帰ってくるので、NeoJSONReaderでSmalltalkオブジェクトに変換することで簡易的にORマッパーも兼ねられました。 Oracle接続テスト NeoJSONReader fromString: ( ZnClient new url: 'http://localhost:3000/oracle'; formAt: 'request' put: (NeoJSONWriter toString:( Dictionary new at: 'sql' put: 'SELECT * FROM hoge WHERE id=:1'; at: 'options' put: (Dictionary new at:'outFormat' put: 4002; yourself); at: 'binds' put: (Array with: 1); yourself )); post ). MySQLでもコネクションプールを使うので接続先のデータベースは都度選択する想定です。 MySQL接続テスト NeoJSONReader fromString: ( ZnClient new url: 'http://localhost:3000/mysql'; formAt: 'request' put: (NeoJSONWriter toString:( Dictionary new at: 'sql' put: 'use fuga; SELECT * FROM hoge WHERE id=?'; at: 'timeout' put: 40000; at: 'values' put: (Array with: 1); yourself )); post ). まとめ これで、WindowsPCで開発してLinuxサーバーで運用するスタイルが確立出来ました。 余談 PharoのLibCクラスのresultOfCommand:を使えばOSProcess同様にWindowsのコマンドが実行できるのがわかったので、最初はnode.jsのプログラムをPharoからLibCで呼び出すようにしましたが、Oracleデータの取得に1300ミリ秒(内データベース接続に900ミリ秒)もかかってしまうため実用になりませんでした。 プログラムを毎回起動するとデータベース接続も毎回行われるため、コネクションプールを使う=サーバー化することで、データの取得が20ミリ秒に短縮出来ました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む