私はNode.JS/Expressアプリケーションを開発中です。私はJadeをテンプレートエンジンとして使用しています。私はいくつかの奇妙な行動を経験しています。Node.JS Express Promiseの問題
私は単純な配列を私のJadeテンプレートに返すモックAPIを持っています。 APIがサーバーの観点から動作することを確認しました。私は、サーバー私はその特定のページに移動する最初の時間を起動するたびしかし、私はこれは私がサーバーを起動する起動するたびに発生したエラー
TypeError: Cannot read property 'length' of undefined
at routes.js:28:34
at Layer.handle [as handle_request] (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\layer.js:95:5)
at next (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\route.js:131:13)
at Route.dispatch (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\layer.js:95:5)
at E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\index.js:277:22
at Function.process_params (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\index.js:330:12)
at next (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\index.js:271:10)
at Function.handle (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\index.js:176:3)
at router (E:\dev\code\javascript\ps_resume_express\node_modules\express\lib\router\index.js:46:12)
を受けます。ただし、実行中は、後続の呼び出しが機能し、ページが正しくレンダリングされます。
は、ここで私は試してみて、何が起こっているかキャプチャするためにconsole.logラインに入れ
router.get('/skills', (req, res) => {
console.log('received request for skills');
resumeAPI.getAllSkills().then((skills) => {
console.log("inside then skills length " + skills.length);
properties.skills = skills;
console.log("inside then properties.skills length " + properties.skills.length);
});
console.log("outside promise skills length " + properties.skills.length);
properties.heading = 'Skills';
res.render('skills', properties)
});
私のルート方法があります。私は間違っているかもしれない何を
class ResumeApi {
static getAllSkills() {
return new Promise((resolve, reject) => {
console.log("from api skills " + skills.length);
resolve(skills);
});
}
}
を次のように
私のAPIメソッドがありますか?
実行
getAllSkills()
の方法.then()
内部 'res.render( 'スキル'、プロパティ)を配置する必要があり、' '内部then'の文でなければなりません。 – Hosar