http://expressjs.com/ja/guide/writing-middleware.html

authorization headerの取り出し方

https://gist.github.com/thebigredgeek/230368bd92aa19e3f6638b659edf5cef

router

https://qiita.com/tamura_CD/items/e3abdab9b8c5aa35fa6b

REST API を作ってみたが、結構入り組んでしまったので修正

Errorクラスはそのままでは継承できない

Promiseの中でエラーが起きたら reject( new 何らかのエラー() )のようにエラーを投げ、後で catchの中で分類して、種類ごとに応答を変えようとした。

this.users.register( name, password )
.then( ( uid ) => {
    // registration succeeded
    let token = this.generateToken( uid );
    res.status( 200 ).json( { token: token } );
} ).catch( err => {
    if( err instanceof AuthError.AuthorizationFailed ) {
        // duplicate username -> conflict error
        res.status( 409 ).json( { message: 'failed' } );
    } else {
        // Unknown error
        res.status( 500 ).json( { message: 'failed' } );
    }
} );

しかし、Errorクラスを使って以下のようにいくつか派生型のErrorクラスを定義してみたが、うまく instanceofで分類することができなかった。全て Errorクラスだと認識されてしまうようだった。

export module AuthError {
    export class AuthorizationFailed extends Error{}
    export class UsernameAlreadyExists extends Error{}
    export class ValidationFailed extends Error{}    
}

https://stackoverflow.com/questions/31089801/extending-error-in-javascript-with-es6-syntax-babelで調べてみると、Node.jsに組み込まれたErrorクラスは継承してもうまく instanceof で分類できないようだった。拡張可能なErrorクラスを作れば解決するらしく、npm で提供されている es6-error モジュール (https://www.npmjs.com/package/es6-error\)が利用できることが分かった。

以下のようにして、やりたいことができた。

import ExtendableError from 'es6-error';

export module AuthError {
    export class AuthorizationFailed extends ExtendableError{}
    export class UsernameAlreadyExists extends ExtendableError{}
    export class ValidationFailed extends ExtendableError{}    
}

results matching ""

    No results matching ""