[解決済み] EJSテンプレート(ExpressJS使用)において、変数の存在を確認する適切な方法は何ですか?
2022-05-14 02:39:03
質問
EJSのgithubページには、簡単な例が1つだけ載っています。 https://github.com/visionmedia/ejs
例
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
これは、userという変数が存在するかどうかをチェックして、存在したら何かをしているようです。 ウンザリでしょ?
私の疑問は、なぜNodeはuser変数が存在しない場合、ReferenceErrorを投げるのでしょうか? これは、上記の例を無意味なものにしてしまいます。 変数の存在を確認する適切な方法は何でしょうか?私はtry/catchメカニズムを使用して、そのReferenceErrorをつかむことを期待されているのでしょうか?
ReferenceError: user is not defined
at IncomingMessage.anonymous (eval at <anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:140:12))
at IncomingMessage.<anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:142:15)
at Object.render (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:177:13)
at ServerResponse.render (/usr/local/lib/node/.npm/express/1.0.7/package/lib/express/view.js:334:22)
at Object.<anonymous> (/Users/me/Dropbox/Projects/myproject/server.js:188:9)
at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
at pass (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10)
at /usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:152:27
at Object.restrict (/Users/me/Dropbox/Projects/myproject/server.js:94:5)
at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
サーバー コードにローカル変数 "user" を追加するだけでこのエラーを解消できることは理解していますが、ここでの要点は、毎日の if/else nullcheck 型パターンを使用して、実行時にそのような変数の存在をチェックしたい、ということです。 存在しない変数に対する例外は、私には馬鹿げているように思えます。
どのように解決するのですか?
jsで何かするのと同じ方法です。
typeof foo == 'undefined'
とするか、あるいは "locals" がそれらを含むオブジェクトの名前であることから
if (locals.foo)
. ただの生JSです :p
関連
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み】Express.js req.bodyが未定義です。
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] Node.jsのホスト名/IPが証明書のaltnamesと一致しない
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] エラーです。Expressでビューの検索に失敗しました
-
[解決済み] "致命的なエラーです。grunt "コマンドを実行すると、"Unable to find local grunt. "と表示されます。
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] nodeやExpressを使用してJSONを返す正しい方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】Node.jsのホスト名/IPが証明書のaltnamesと一致しない。
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
[解決済み] MongoClient v3.0使用時、db.collectionが関数でない
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] Json Web Token verify() return jwt malformed
-
[解決済み] NPMが同じエラーで固まる EISDIR: ディレクトリに対する不正な操作、エラーで読み込み (ネイティブ)
-
[解決済み] npm not able to find a fileに関連するエラーは何が原因でしょうか?node_modules サブフォルダ内にコンテンツがありません。なぜでしょうか?
-
[解決済み] Mongoose Schema がモデルとして登録されていません。