meadowlark.js
3.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
var express = require('express');
//깃 테스트를 위해 주석하나 추가
//require : 모듈 가져오는 함수
//include 와 비슷한 느낌이군.
//기본적으로 node_modules 디렉토리에서 찾는다
// ./를 붙이면 거기서 찾지 않는다.
var fortune = require('./lib/fortune.js');
var getWeather = require('./lib/getWeather.js');
//if(app.thing ====null) console.log('bleat');
var app = express();
app.use(express.static(__dirname + '/public'));
//뷰를 렌더링 할때 사용할 기본 레이아웃
//기본적으로 익스프레스는 views 에서 뷰를 찾고, views/layouts에서 레이아웃을 찾는다.
var handlebars = require('express-handlebars').create({
defaultLayout: 'main',
helpers: {
section: function (name, options) {
if (!this._sections) this._sections = {};
this._sections[name] = options.fn(this);
return null;
}
}
});
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');
app.set('port', process.env.PORT || 3000);
//쿼리스트링 감지하는 미들웨어는 이것을 사용할 라우터 보다 앞에 있어야함.
app.use(function (req, res, next) {
res.locals.showTests = app.get('env') !== 'production' && req.query.test === '1';
next();
});
//파셜 쓰기.
//여러페이지에 나타나지만 모든 페이지에 나타나지 않는다면 이 방법 고려.
app.use(function (req, res, next) {
if (!res.locals.partials) res.locals.partials = {};
res.locals.partials.weatherContext = getWeather.getWeatherData();
next();
});
app.get('/', function (req, res) {
//변수를 만들고!~!!
var product =
{
currency: {
name: 'United States dollars',
abbrev: 'USD',
},
tours: [
{ name: 'Hood River', price: '$99.95' },
{ name: 'Oregon Coast', price: '$159.95' },],
specialsUrl: 'http://blog.naver.com/gjwodnr3454',
currencies: ['USD', 'GBP', 'BTC'],
};
res.render('home', {
//http에 전달해야하는 변수 이름을 알고있으니까 그 변수에다가 내가 값을넣어준다.
tours: product.tours,
currency: product.currency,
specialsUrl: product.specialsUrl,
currencies: product.currencies
});
});
app.get('/about', function (req, res) {
// var randomFortune = fortunes[Math.floor(Math.random() * fortunes.length)];
res.render('about', {
fortune: fortune.getFortune(),
pageTestScript: '/qa/tests-about.js'
});
});
app.get('/tours/hood-river', function (req, res) {
//레이아웃을 쓰지 않으려면 layout:null 넘김
//null 말고 layouts 서브디렉토리에 있는 다른 레이아웃을 써도됨.
res.render('tours/hood-river', { layout: null });
});
app.get('/tours/oregon-coast', function (req, res) {
res.render('tours/oregon-coast');
});
app.get('/tours/request-group-rate', function (req, res) {
res.render('tours/request-group-rate');
});
app.get('/nursery-rhyme', function(req,res){
res.render('nursery-rhyme');
});
app.get('/data/nursery-rhyme',function(req,res){
res.json({
animal:'squirrel',
bodyPart:'tail',
adjective:'bushy',
noun:'heck',
});
});
//404 Page
app.use(function (req, res, next) {
res.status(404);
res.render('404');
});
app.use(function (err, req, res, next) {
res.status(500);
res.render('500');
});
app.listen(app.get('port'), function () {
console.log('Express started on http://localhost:' + app.get('port') + '; press Ctrl-C to terminate.');
});