category: JavaScript  1/3

AngularのE2EテストでChromeDriverのバージョンを固定する方法

最近のAngualr (Angular CLI) だと、Protractorを使ったE2Eテストが自動でセットアップされるんだけど、ちょっと前にドライバとブラウザのバージョン不一致で動かなくなってしまったのでその対策をまとめとく。E2Eテストでは protractor.conf.js に定義されたブラウザが使われる。が、ブラウザそのものは、実行環境に別途自分でインストールする必要がある。なので、普通にアップデートしてるとちょくちょくバージョンが上がる。ng...

Nestでマイクロサービスのプロトコルを追加する

前回に引き続きNestの話題。Nestは普通のWeb APIの他にgRPCとかによる各種マイクロサービスにも対応している。のだが、うちのプロジェクトでは、WebSocket+JSON-RPC2を使っているのだけど、標準ではもちろんそんなピンポイントには対応していない。で、調べてみたところ、(何故かサイドメニューからリンクされていないページに)自分でマイクロサービスを定義する方法もあったので、ちょっとサーバー側を作ってみた。以下、簡単に...

TypeScript用Webフレームワーク「Nest」を使ってみた

TypeScript用のWebフレームワーク、いいのが見つからずにずっと昔からのexpressでやってたのだけれど、暫く前にTwitterで「Nest」なるフレームワークを知り、評判も良さそうで実績もあるようなのでちょっと試してみることにしてみた。以下、半月ほど使った感想とかそういう話を書いてみる。expressの問題点まず現行のexpressの問題点(不満点)はこんな感じ。基本設計が古い。Promise登場前なのでcallbackばかり。JavaScriptのフレ...

JavaScriptのstaicプロパティの不思議な挙動

JavaScript (TypeScript) のstaticプロパティの動作でガッツリとハマったのでメモ。Sequelize を拡張していたら、親のModelクラスにあるstaticプロパティがサブクラスで別々の値でなければおかしいことに気付き悩んだ。で実験してみた。まず、こんな感じの継承関係があったとする。class Parent { static value = '';}class Child1 extends Parent { }class Child2 extends Parent { }親クラスとサブクラスでそれぞれ値を書き換...

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...

SequelizeをTypeScriptで動かす2

1月に「SequelizeをTypeScriptで動かす」って自分でinterface定義して動かす手順を書いたけど、その後 sequelize-typescript なるそのものズバリで、遥かに使いやすく今風になったライブラリを見つけたので、改めてそっちの紹介やら手順を解説する。…といっても、ぶっちゃけ凄く簡単に入って動いたので、ごく簡単にだけ。まず、インストールはnpmから入れるだけで公式見れば済むので割愛。次、モデル定義はこんな感じ。models/admi...

TypeScriptで作るアノテーションだらけのWebアプリ

先日TypeScriptのORMとして TypeORM というものを発見。これのサンプルを見ていたところ、さらに TypeDI やら routing-controllers というライブラリ群を組み合わせることで、今までのJavaScript界とは打って変わったアノテーション(デコレーター)だらけのJavaっぽい、イケてるWebアプリを作れることが判明したので、その紹介をする。まずは概要。TypeORMTypeScript用のO/Rマッパー。動的言語で人気のActive Record…ではなく、ア...

Angular2でパスワード再入力みたいなバリデーションを作る(改)

Angular2/4の標準のバリデータには、複数のフォームを比較するみたいなものは用意されてないっぽいので、それの作り方。イケてないバージョンを経て、ng2-validation のソース見て作成。というかもう ng2-validation の equalTo 再実装して解説に近いけど以下解説。まず最初にサンプルソースの抜粋から。こんな感じ。equals-validator.directive.tsimport { Directive, Input, forwardRef, Attribute } from '@angular/core';impor...

[旧版]Angular2でパスワード再入力みたいなバリデーションを作る

Angular2/4の標準のバリデータには、複数のフォームを比較するみたいなものは用意されてないっぽいので、それの作り方。参考にしたのはこちらのページ。でもところどころ改良したので、以下説明。※ よりイケてる実装発見したのでそちらをご覧ください。この記事は参考用&自省用に残します。まず最初にサンプルソースの抜粋から。こんな感じになる。equals-validator.directive.tsimport { Directive, forwardRef, Attribute } ...