main.js
1app.use(expressSession({ 2 secret: "secret-passcode-tetsu", 3 resave: false, 4 saveUninitialized: false, 5 cookie: { 6 maxAge: 60*1000 //一分 7 } 8})); 9 10app.use(connectFlash()); 11 12app.use((req, res, next) => { 13 res.locals.flashMessages = req.flash(); 14** console.log(res.locals.flashMessages);** ここのログを添付 15 next(); 16});
userContorller.js
1l~略~ 2.then(arraySearchResults => { 3 let arraySearchFilter = arraySearchResults.filter(searchResultsParam => { 4 return (searchResultsParam.statuses.length); 5 }); 6** if(!arraySearchFilter.length){ 7 8 return Promise.reject(new Error("検索結果がありません")); 9 }** 10 11 const sortArraySearchResults = arraySearchFilter.sort((a, b) => { 12 if (new Date(Date.parse(a.statuses[0].created_at)) < new Date(Date.parse(b.statuses[0].created_at))) return 1; 13 if (new Date(Date.parse(a.statuses[0].created_at)) > new Date(Date.parse(b.statuses[0].created_at))) return -1; 14 return 0 15 }); 16 res.locals.arraySearchResults = sortArraySearchResults; 17 next(); 18 19.catch(error => { 20 req.flash("errorMessage",error.toString()); 21 req.flash("test", "テスト"); 22 next(); 23~略~ 24 25 searchIndex: (req, res) => { 26 res.render("twitter/search"); 27 }
search.ejs
1 2<%= flashMessages.errorMessage %>
挙動がおかしくて
res.locals.flashMessagesにメッセージは格納できているようなのですが
node.jsのmain.jsでres.locals.flashMessagesをconsole.logで表示すると
プロンプトの最後に空のオブジェクトが表示されます。
このためにEJSでフラッシュメッセージが取得できていない感じなのですが・・・
数十回に一回のタイミングでEJSにフラッシュメッセージが表示されうまくいきます。
なぜ確率的にうまくいくのかわかりません。フラッシュメッセージに非同期通信が関連してるのでしょうか。
→userController.jsのPromise処理の中で検索結果が0だった場合にエラーのインスタンスをrejectしています。これをcatchするようにしてるのですがここの処理の構文が適切ではない気がします。調べてみます。
main.jsでのconsole.log(res.locals.flashMessages)ログ
{ errorMessage: [ 'Error: 検索結果がありません' ], test: [ 'テスト' ] }
{ errorMessage: [ 'Error: 検索結果がありません' ], test: [ 'テスト' ] }
{ errorMessage: [ 'Error: 検索結果がありません' ], test: [ 'テスト' ] }
{ errorMessage: [ 'Error: 検索結果がありません' ], test: [ 'テスト' ] }
{ errorMessage: [ 'Error: 検索結果がありません' ], test: [ 'テスト' ] }
{ errorMessage: [ 'Error: 検索結果がありません' ], test: [ 'テスト' ] }
{}
{}
解決方法がありましたらご教示の程お願いいたします。
回答1件
あなたの回答
tips
プレビュー