从Express / Node.js网络应用程序预填充Pug表单

时间:2017-11-08 07:16:28

标签: html node.js mongodb express pug

我有一个使用Express构建的Node.js Web应用程序,我在查询MongoDB后尝试填充Jade模板。我想用这些值填充Jade模板。

我不明白的是为什么即使我在collection.find()函数中注释掉所有内容,并且只有一个&res;#res;(' editresource')& #39; - 视图未呈现。我不理解一些基本的东西吗?

// 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不起作用,也没有发送整个对象。

3 个答案:

答案 0 :(得分:0)

要使用发送到pug的变量,您需要正确使用变量名。

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

答案 1 :(得分:0)

创建一个对象以发送render()方法。

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

res.render('editresource', renderData)

并将输入的属性的可变名称更改为dName

input#name.form-control(type='text', name='name', required='', value=dName)

答案 2 :(得分:0)

解决!参数正在正确发送但我在客户端收到响应时没有注入html。 (例如$('#wrapper')。html(response);)