meadowlark.js 3.32 KB
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: '/about',
            currencies: ['USD', 'GBP', 'BTC'],
        };
    res.render('home', {
        //http에 전달해야하는 변수 이름을 알고있으니까 그 변수에다가 내가 값을넣어준다.
        tours: product.tours,
        currency: product.currency,
        specialsUrl: product.specialsUrl,
        currencies: product.currencies
    });
});

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('/about', function (req, res) {
    //   var randomFortune = fortunes[Math.floor(Math.random() * fortunes.length)];
    res.render('about', {
        fortune: fortune.getFortune(),
        pageTestScript: '/qa/tests-about.js'
    });
});

//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.');
});