I want to display all posts in my database via the getList function:
In my service layer I have the following function:
function getList() {
const res = knex('posts').where({
deleted: false,
}).orderBy('createdAt')
console.log("getList: " + res)
return res
}
Within the route file I am calling my getList function:
var express = require('express');
var router = express.Router();
const service = require('../services/post')
/* GET home page. */
router.get('/', function (req, res, next) {
postList = service.getList().then(data => console.log(JSON.stringify(data)))
console.log("Postlist: " + postList)
res.render('index', {
postList: postList
});
});
module.exports = router;
Finally I would like to display the result in my index.pug file:
table.table
thead.thead-inverse
tr
th #
th Title
th Description
th Created At
th Action
tbody
//TODO: If post is empty
for post in postList
tr
td(scope='row')=post.id
td=post.title
td=post.description
td=post.createdAt
td
a.btn.btn-primary(href='/edit', role='button') Edit
However, I get the following error:
C:\Users\user\Desktop\Coding Projects\learning_crud\views\index.pug:22 20| for post in postList 21| tr > 22| td(scope='row')=post.id 23| td=post.title 24| td=post.description 25| td=post.createdAt Cannot read property 'id' of undefined
TypeError: C:\Users\user\Desktop\Coding Projects\learning_crud\views\index.pug:22
20| for post in postList
21| tr
> 22| td(scope='row')=post.id
23| td=post.title
24| td=post.description
25| td=post.createdAt
Cannot read property 'id' of undefined
at eval (eval at wrap (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:152:61)
at eval (eval at wrap (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:173:4)
at template (eval at wrap (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:225:119)
at Object.exports.renderFile (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\pug\lib\index.js:428:38)
at Object.exports.renderFile (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\pug\lib\index.js:418:21)
at View.exports.__express [as engine] (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\pug\lib\index.js:465:11)
at View.render (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\view.js:127:8)
at tryRender (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\application.js:640:10)
at Function.render (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\response.js:971:7)
at C:\Users\user\Desktop\Coding Projects\learning_crud\routes\index.js:10:7
at Layer.handle [as handle_request] (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\user\Desktop\Coding Projects\learning_crud\node_modules\express\lib\router\index.js:281:22
Furthermore I get the following console output:
Listening on localhost:8080
getList: select * from "posts" where "deleted" = false order by "createdAt" asc
Postlist: [object Promise]
GET / 500 326.920 ms - 4255
[{"id":6,"title":"Excepturi rerum ratione omnis aut quo.","description":"Eum nostrum vel reiciendis qui. Nam sapiente unde deserunt totam at dolores. Tempor
e corrupti fugiat et consequuntur vero. Laboriosam autem mollitia odit cum repellat.","deleted":false,"createdAt":"2017-09-17T01:15:31.865Z","updatedAt":"20
17-09-16T22:02:41.233Z","deletedAt":"2017-09-17T00:02:15.235Z"}]
GET /css/bootstrap/bootstrap.min.css 304 3.464 ms - -
GET /css/style.css 304 0.913 ms - -
GET /js/bootstrap/bootstrap.min.js 304 1.173 ms - -
Is there a problem within my pug file? Any suggestions what I am doing wrong?
I appreciate your replies!
UPDATE
I changed my router to the following and it works:
router.get('/', function (req, res, next) {
knex('posts').select().where({
deleted: false,
}).orderBy('createdAt').then(query => {
res.render('index', {
postList: query
});
})
});
Any suggestions why?
console.log("Postlist: " + postList)?eachinstead offorlike:each post in postList