2016-12-01 7 views
0

私の手をノードのところで試してみましたが、EJSテンプレートを取得して非常に基本的なデータを表示できません。私は2つのコントローラを持っています - 1つは基本的なホーム/約/連絡先用で、もう1つは投稿用です。私が/ postsに行ったとき、正しいページがレンダリングされますが、そのデータはなく、 "postsは定義されていません"というエラーが表示されます。しかし、なぜこれが当てはまるのか分かりません。乾杯。EJS変数定義の問題

var express = require('express'); 
var router = express.Router(); 

var posts = [{ 
    id: 0, 
    title: "This is an example post.", 
    author: "Tony", 
    content: "This is some content for a post" 
}]; 

router.get('/', function(req, res) { 
    res.render("posts/index"); 
}); 

router.get('/new', function(req, res) { 
    res.send("NEW"); 
}); 

router.get('/:id', function(req, res) { 
    res.send("SHOW"); 
}); 

router.post('/', function(req, res) { 
    res.send("CREATE"); 
}); 

router.get('/:id/edit', function(req, res) { 
    res.send("EDIT"); 
}); 

router.put('/:id', function(req, res) { 
    res.send("UPDATE"); 
}); 

router.delete('/:id', function(req, res) { 
    res.send("DELETE"); 
}); 


module.exports = router; 

とHTML:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Posts</title> 
</head> 
<body> 
<h1>hello</h1> 
<nav> 
    <ul> 
    <li><a href="/posts">Posts</a></li> 
    <li><a href="/about">About</a></li> 
    <li><a href="/contact">Contact</a></li> 
    </ul> 
</nav> 
<%= posts %> 

<% for(var i=0; i < posts.length; i++) { %> 
    <%= posts[i].id %> 
    <h2><%= posts[i].title %></h2> 
    <h4><%= posts[i].author %></h4> 
    <p><%= posts[i].content %></p> 
<% } %> 

<button><a href="/posts/new">New</a></button> 

</body> 
</html> 

とはapp.js

それがためにレンダリングされていたときにあなたがページに posts変数を渡すことを確認する必要があり
var express = require("express"); 
var app  = express(); 
var bodyParser = require("body-parser"); 
var port  = process.env.PORT || 3000; 
var router = require("./config/routes"); 
var posts = require("./config/posts"); 

// Set the view directory to /views 
app.set("views", __dirname + "/views"); 

// Let's use the Express templating language 
app.set("view engine", "ejs"); 

// Setup public folder to serve static files 
app.use(express.static(__dirname + "/public")); 

// Setup app to parse req.body 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.use('/', router); 
app.use('/posts', posts); 

app.listen(port); 

答えて

1

その変数をEJSテンプレートに取得します。

var posts = [{ 
    id: 0, 
    title: "This is an example post.", 
    author: "Tony", 
    content: "This is some content for a post" 
}]; 

router.get('/', function(req, res) { 
    res.render("posts/index", { 
    posts: posts 
    }); 
}); 

// ... 
関連する問題