2017-04-14 9 views
1

私はnodejsを初めて使用し、追加の投稿フォームの詳細を送信しながら、下記の問題に直面する小さなプロジェクト(ブログ) addPost.jadeとpost.jsのコードも追加しました。私はこれにこだわっていますよう定義されていない翡翠のプロパティ '長さ'を読み取ることができません

//Created by Sinner on 11-Apr-17. 

extends layout 

block content 
    h1=title 
    ul.errors 
     if errors 
      each error, i in errors 
       li.alert.alert-danger #{error.msg} 

     form(method='post', action='/posts/add', enctype='multipart/form-data') 
      .form-group 
       label Title: 
       input.form-control(name='title', type='text') 
      .form-group 
       label Category: 
       select.form-control(name='category') 
        each cat, i in catList 
         option(value = '#{cat.title}') #{cat.title} 
      .form-group 
       label Body: 
       textarea.form-control(name='body', id='body') 
      .form-group 
       label Main Image: 
       input.form-control(name='mainimage', type='file') 
      .form-group 
       label Author: 
       select.form-control(name='author') 
        option(value='Akshay Gupta') Akshay Gupta 
        option(value='Riddhi Tandon') Riddhi Tandon 
      input.btn.btn-default(name='Submit', type='submit', value='Save') 
      script(src='/ckeditor/ckeditor.js') 
      script CKEDITOR.replace('body') 

post.jsが

​​

ファイルGETリクエストのために細かいレンダリングされる

TypeError: E:\Web projects\NodeJs projects\nodeBlog\views\addpost.jade:19 
    17|    label Category: 
    18|    select.form-control(name='category') 
> 19|     each cat, i in catList 
    20|      option(value = '#{cat.title}') #{cat.title} 
    21|   .form-group 
    22|    label Body: 

Cannot read property 'length' of undefined 
    at eval (eval at <anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:218:8), <anonymous>:210:31) 
    at eval (eval at <anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:218:8), <anonymous>:247:4) 
    at eval (eval at <anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:218:8), <anonymous>:383:22) 
    at res (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:219:38) 
    at Object.exports.renderFile (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:380:38) 
    at Object.exports.renderFile (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:370:21) 
    at View.exports.__express [as engine] (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:417:11) 
    at View.render (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\view.js:126:8) 
    at tryRender (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\application.js:639:10) 
    at EventEmitter.render (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\application.js:591:3) 
    at ServerResponse.render (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\response.js:960:7) 
    at E:\Web projects\NodeJs projects\nodeBlog\routes\post.js:89:6 
    at Layer.handle [as handle_request] (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\router\layer.js:95:5) 
    at next (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\router\route.js:131:13) 
    at Immediate.<anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\multer\lib\make-middleware.js:53:37) 
    at runCallback (timers.js:655:20) 

addPost.jadeファイルには、この問題を解決するには、私を助けてください。

PS:また、ポストは、問題が、このコードの一部である

おかげ

答えて

1

を追加取得しています。

//form Validations 
 
    req.checkBody('title','Title field is required').notEmpty(); 
 
    req.checkBody('body','Body field is required').notEmpty(); 
 

 
    var errors = req.validationErrors(); 
 

 
    if(errors){ 
 
     res.render('addPost',{ 
 
      "errors": errors, 
 
      "title" : title, 
 
      "body" : body 
 
     }); 
 
    }else{ 
 
     var posts = db.get('posts'); 
 

 
     // add it to db 
 
     posts.insert({ 
 
      "title":title, 
 
      "body":body, 
 
      "category": category, 
 
      "date":date, 
 
      "author":author, 
 
      "mainimage":mainImageName 
 
     }, function (err, post) { 
 
      if(err){ 
 
       res.send('There was an issue submitting the post'); 
 
      }else{ 
 
       req.flash('success', "Post Submitted"); 
 
       req.location('/'); 
 
       req.redirect('/'); 
 
      } 
 
     }); 
 
    } 
 
    
 
    //To be specific this one 
 
    res.render('addpost',{ 
 
     "title": "Add Post" 
 
    });

コードres.render()のあなたの最後のブロックがあるため、非同期プロセスのposts.insert();前に実行されます。 catListを持っていないもの。

更新:あなたはエラーがないかチェックしているように、あなたのヒスイでcatListがあるかどうかをチェックすることで、この問題を解決することができ

。以下のように:あなたは、あなたのコード内で隠蔽すべてのケースを持っていながら、

.form-group 
      label Category: 
      select.form-control(name='category') 
       if catList 
       each cat, i in catList 
        option(value = '#{cat.title}') #{cat.title} 

もう一つは、私はあなたが最後にres.render()を持って理解していません。

+0

この問題を解決する方法を教えてください。 –

+0

私は問題を理解しました助けてくれてありがとう。 –

+0

私はコード をコメントアウトしました//具体的にはこの1つです res.render( 'addpost'、{ "タイトル": "投稿を追加" }); および req.location( '/'); req.redirect( '/');これはres.location( '/')とres.redirect( '/')である必要があります –

関連する問題