tag: Node.js  1/1

Passportで認証失敗をエラーにするにはfailWithErrorを指定する

Node.jsの認証ライブラリのPassportで、認証NGの場合にエラーレスポンスが返せなくて調べたのでメモ。こんな風に、リクエストヘッダーにトークンが無いとエラーになるAPIがあったとする。import * as http from 'http';import * as express from 'express';import * as passport from 'passport';import { HeaderAPIKeyStrategy } from 'passport-headerapikey';const app = express();app.use(passport.initialize());app.use(pas...

NPM 5.8.0~6.xにはVagrant共有フォルダでETXTBSY: text file is busyとなるバグがある

久し振りにVagrantでNode.js開発環境作ってたら見事にハマったのでメモ。Windows上のVagrantで、VirtualBoxの共有フォルダ (VirtualBox shared folders) の中でnpm installするにはいろいろとテクニックが必要なのだけど、2018年7月現在最新のNode.js 10.7.0に同梱されているNPM 6.1.0では、そもそも表題の通りNPM自身にバグがあり、どう頑張ってもnpm installが出来なくなっているようだ。npm/npm - Issue #20605 - [6.0.0] ETXTB...

動的型付けerのための静的型付けerに怒られないJSONの作り方

ここ最近、ゲームのお仕事でPHPやらNode.jsやらのサーバーサイドからUnity (C#) やらUE4 (C++) やらのクライアントにJSONでデータ返すのが続いてるんだけど、PHPみたいな動的型付け言語のノリでJSONを吐いてクライアントからこっちは静的型付け言語だからこれじゃ困る、という話をされることがちょくちょくあるので、後学のためにちょっとまとめてみる。なお、実際のところどの程度困るのかとかは未確認なのでご了承ください。(単...

業務エラー例外の作り方の考察

今更なネタではあるものの、かれこれ1x年ぐらいサーバーサイド中心に開発してるけどいまだに悩むので考察を整理。まずここでいう業務エラー例外ってのは、業務固有の例えば「ポイントが足りません」「利用期間が終了しました」みたいなエラーを扱う例外のこと。業務って言ってるけど別にお仕事的なシステムに限らず、ソシャゲでもWebサービスにでも何でもある(だろう)やつ。昔っからあるはずなのに、何故か定番という感じのもの...

Zone.jsをNode.js版ThreadLocalとして使う

Node.js でアプリ作ってて、リクエスト情報(セッションIDとかIPアドレスとか)をログとかで出したいけど、そのためにモデル層にリクエストを引き渡したくない、という事で方法を調べたところ、Zone.js というものが使えそうという事が分かったのでその話。こういう仕組みを作る場合、グローバル変数的なものがあればそこに置いておけばいいんだけど、JavaScriptは非同期処理なので普通のグローバル変数では駄目で、リクエストごと...

Node.js開発用のVagrant環境構築(Ansible版)

先日の奴のAnsible版。といっても機能的には本当にシェルスクリプトをAnsibleに置き換えただけなので差分なし。でも繰り返し実行しても問題ないし、今後の拡張とかもやりやすくなったかも?Vagrantfile# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.configure(2) do |config| config.vm.box = "centos/7" # ホストPCとゲストPCのネットワークを構築 config.vm.network "private_network", ip: "172.16.10.10" # ホストPCの...

Node.js開発用のVagrant環境構築

お仕事代わって Node.js 使うことになってせっかくなので Vagrant で開発環境作ったのでメモ。→ 2016/7/12 Ansible版公開。ホストOSは普通に Windows10 想定。ゲストOSが CentOS7 で、Node.js と MariaDB のインストールまで一発な Vagrantfile はこんな感じ。# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.configure(2) do |config| config.vm.box = "centos/7" # ホストPCとゲストPCのネットワークを構築 config.vm.networ...