2017-11-08 11 views
0

Expressで構築されたNode.js Webアプリケーションがあり、MongoDBを照会した後にJadeテンプレートを作成しようとしています。これらの値をJadeテンプレートに入力したいと思います。Express/Node.js WebアプリケーションからPugフォームを事前入力する

私が理解できないことは、collection.find()関数内のすべてをコメントにして、 'res.render(' editresource ')のみを持っていても、ビューがレンダリングされない理由です。何か基本的なことを理解していないのですか?

// From pug file (editresource.pug) 
extends layout 

block content 
    h1 = title 

    .main.container 
     .row 
      .col-md-6.col-md-offset-3 
       h1.display-4.m-b-2 Edit Resource 

       // register form 
       form(method='POST' action='/edit/editresource') 
        div.form-group 
         label(for='name') Name: 
         input#name.form-control(type='text', name='name', required='', value=locals.dName) 

// From Node.js/Express: 
    router.get('/editresource/:id', function(req, res) { 
    var db = req.db; 
    var resource_collection = db.get('resources'); 

    var resourceId = req.params.id; 

    resource_collection.find({'_id' : resourceId},{},function(e,docs){ 
     // res.render('editresource', { 
     // name : 'asdf' 
     // }); 

     //res.locals.dName = docs[0].name; 
     //res.render('editresource') 

     res.render('editresource', { 'viewpost' : docs[0].name }) 

     //res.name = docs[0].name; 
     //res.render('editresource', { name : docs[0].name }); 
    }); 
// attempting to call res.render('editresource') here does not work?? 
}); 

// All of this is fired by this function when a link is clicked 
function editResource(event) { 
    $.ajax({ 
     type: 'GET', 
     url: '/edit/editresource/' + $(this).attr('rel') 
    }).done(function(response) { 

     if (response.msg === '') { 
     } 
     else 
      alert('Error: ' + response.msg); 
    }); 
}; 

は私が a similar questionが見つかりましたが動作しませんres.localsを使用して、またオブジェクト全体を送信ありません。

+0

'docs [0] .name'値の文字列ですか?あれば、値として' viewpost'を使用してください: 'value = viewpost' in **玉** – agit

+0

ああ、そうです。私はその変更のために投稿を編集しました:)残念ながら、まだ動作しません - 私のビューエンジンは現在pugですが。 – huangtt

+0

pugファイルのレンダリング中にエラーメッセージはありますか? – agit

答えて

0

解決へ!パラメータは正しく送信されていましたが、クライアント側で応答が受信されたときにhtmlを挿入しませんでした。 (例:$( '#wrapper').html(response);)

0

pugに送信された変数を使用するには、変数名を適切に使用する必要があります。

div.form-group 
    label(for='name') Name: 
    input#name.form-control(type='text', name='name', required='', value=viewpost 
+0

おっと、ちょっとタイプミスありがとう!残念ながら、これはまだフォームを正しく埋め込むことができません。 – huangtt

+0

コードを正しくインデントしましたか?それは正しくインデントされていません! –

+0

です!私はちょうど全体のファイルからスニペットを取った:)ちょうどビューをレンダリングしようとしていることが動作していないことに気づいた私のポストを編集しました – huangtt

0

render()メソッドを送信するオブジェクトを作成します。

var renderData = { 
    dName = docs[0].name 
}; 

res.render('editresource', renderData) 

値をvaraible名前を変更入力の属性をdName

input#name.form-control(type='text', name='name', required='', value=dName) 
関連する問題