2016-11-14 3 views
0

Я пытаюсь запустить запрос выбора из db и распечатать результаты. Но даже я вижу результат в консоли, я не вижу на индексной странице. (Hovewer я вижу результат в консоли, но он также не отображается правильно. У меня есть 2 строки в db, но я вижу 3 строки для каждой строки, поэтому результат в консоли: 2X3 = 6 строк.) Я ставлю снимок экрана о результатах консоли конец вопроса.Node.js - результат печати из sql

Код в app.js

app.use('/', routes, function(req, res){ 
    pg.connect(connect, function(err, client, done){ 
    if(err){ 
     return console.error('errrr', err) 
    } 
    client.query('select * from recipes', function(err, result){ 
    if(err){ 
     return console.error('error running query', err); 
    } 
    console.log(result.rows); 
    res.render('index.njk', { recipes: result.rows}); 
    done(); 
    }); 
    }); 
    }); 

кодекса index.njk

<ul> 
    {% for name, item in recipes %} 
    <li>{{ name }}: {{ item.name }}</li> 
    {% endfor %} 
</ul> 

this is result of the console Можете ли вы помочь мне исправить это?

ответ

0

Я решил проблему, используя нижестоящий код в index.js вместо использования app.js. Я не уверен, что это правильный путь, но теперь он работает нормально. Если это не правильно, позвольте мне исправить это, пожалуйста.

router.get('/', function(req, res){ 
    pg.connect(connect, function(err, client, done){ 
    if(err){ 
    return console.error('errrr', err) 
    } 
    client.query('select * from recipes', function(err, result){ 

    if(err){ 
     return console.error('error running query', err); 
    } 
    if(result.rows.length > 0) { 
     res.render('index.njk', { recordResult: result.rows}); 
     console.log(result.rows); 
    }else { 
     console.log('No rows found in DB'); 
     } 
    done() 
    }); 
    }); 
}); 
0

Кажется, что (через ваше изображение консоли), что result.rows представляет собой массив массивов, который имеет в нем 2 значения. Поэтому, перебирая значение в вашем index.njk, recipes представляет собой массив массивов и не содержит элемент с атрибутом имени.

Если вы установили рецепты: result.rows [0], что должно обеспечить быстрое решение:

res.render('index.njk', { recipes: result.rows[0]});

Это позволяет получить первый элемент в массиве массивов, что все в порядке, потому что массив содержит только один элемент (2 элемента, которые вы действительно хотите!). Вы должны проверить, прежде чем делать это, чтобы result.rows.length> 0, чтобы вы не выходили за пределы и не получали ошибку.

if(result.rows.length > 0) { 
    res.render('index.njk', { recipes: result.rows[0]}); 
}else { 
    console.log('No rows found in DB'); 
} 
+0

К сожалению, это не сработало –

+0

Есть ли другая идея? –