#テンプレートリテラルの罠にハマった話
結論: テンプレートリテラルを使った文字列(ヒアドキュメント)はインデントも含まれるから気を付けろ
##どんな風にハマったのか
先日、Webトークンを生成するためにこんなコードを書きました。
.js
const keyID = 'keykeykey';
const teamID = 'teamteamteam';
const secret = `-----BEGIN PRIVATE KEY-----
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
-----END PRIVATE KEY-----`;
const jwtToken = jwt.sign({}, secret, {
algorithm: "ES256",
expiresIn: "180d",
issuer: teamID,
header: {
alg: "ES256",
kid: keyID
}
});
すると、こんなエラーが。
PEM routines:PEM_read_bio:bad end line
なんで!あってるじゃん!テンプレートリテラル `` 使ってるから、改行しても大丈夫じゃないの??
##テンプレートリテラルを使った文字列(ヒアドキュメント)ではインデントしちゃいけない
よくなかったのは以下の部分です。
.js
const secret = `-----BEGIN PRIVATE KEY-----
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
-----END PRIVATE KEY-----`;
この状態では左側のインデントも文字列として認識されてしまいます。
正しくは、以下のような感じです。
.js
const secret = `-----BEGIN PRIVATE KEY-----
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
abcabcabcabcabcabcabcabcabcabcabcabcabcabc
-----END PRIVATE KEY-----`;
このように完全に左側に寄せてあげると、エラーが出ません。
何か間違いがあったら教えてください。