背景
Nuxt.js(node.js)にて開発する時、まずメッセージの体系化を行いたい。引数にも対応可能なのが望ましい。
- 引数含むメッセージファンクション
- 呼び出し側
上記2要素で完結しつつ、1メッセージに付き1行~2行ぐらいでシンプルにならないかと考えた。
成果
一応できた。
メッセージ側
// アロー関数を用いて記述、実行。
var messages = {
example1: (...args:string[]) => escape(`const${args[0]}${args[1]}${args[2]}`) ,
example2: (...args:string[]) => escape(`テ${args[0]}ス${args[1]}ト`)
}
// XSS対策のエスケープ
function escape(str:string){
str = str.replace(/&/g, '&');
str = str.replace(/</g, '<');
str = str.replace(/>/g, '>');
str = str.replace(/"/g, '"');
str = str.replace(/'/g, ''');
return str
}
使っているのはテンプレートリテラルとアロー関数。いずれもIE非対応であることは留意。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Template_literals
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions
呼び出し側の自動テストメソッド(Jest)
import { messages} from '@/logic/common'
// 下記はいずれも成功。
// messages.example2などで入力補完として出てくるためソースを追ったり探したりするのが容易い
describe('callMessage', () => {
test('messages', () => {
expect(messages.example1( '0','3','2')).toEqual('const032')
})
test('escape messages', () => {
expect(messages.example2( '&','2','1')).toEqual('テ&ス2ト')
})
})
メッセージを編集しやすく、複数引数にも対応でき、コーディング視点からも楽。やりたかったことはできていそうと考える。
テンプレートリテラルなので、改行も容易い。