app.js 4.53 KB
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var fs = require("fs");

app.use(express.static('public'));
app.use(bodyParser.json());
app.use(bodyParser.text());
app.use(bodyParser.urlencoded({
  extended: false
})); //post에서bodyparser로 받기 위함
app.set('views', __dirname + '/views');
app.set('views engine', 'ejs');


//main page
app.get(['/food', '/food/:id'], function(req, res) {
  var id = req.params.id;
  if (id) {
    if (id == 'search') {
      res.render('map.ejs', {
        title: 'Searching',
        searching: '경희대학교 국제캠퍼스'
      });
    } else if (id == 'recommendation') {
      res.render('recommendation.ejs', {
        title: 'Recommendation',
        description: 'Enter the conditions you want.'
      });
    }
  } else {
    res.render('index.ejs', {
      title: 'Welcome',
      description: 'Hello, Here is our homepage.'
    });
  }
})

//사용자가 호출한 search page
app.post('/food/search', function(req, res) {
  var title = req.body.title;
  res.render('map.ejs', {
    title: 'Search',
    searching: title
  });
  // res.redirect("https://www.google.com/search?q=" + title + "&oq=" + title + "&aqs=chrome..69i57j0l3j69i60j69i61.3149j0j9&sourceid=chrome&ie=UTF-8")
})

//사용자가 호출한 recommendation page
app.post('/food/recommendation', function(req, res) {
  fs.readFile('data/food.json', 'utf8', function(err, data) {
    if (err) {
      console.log((err));
      res.status(500).send('Internal Server Error');
    } else {
      var users = JSON.parse(data);
      var price = req.body.price;
      var shape = req.body.shape;
      var kinds = req.body.kinds;

      if (!Array.isArray(shape) && shape) {
        var shape = [];
        shape.push(req.body.shape);
      }
      if (!Array.isArray(kinds) && kinds) {
        var kinds = [];
        kinds.push(req.body.kinds);
      }
      // var len_shape=shape.length;
      // var len_kinds=kinds.length;

      var set1 = new Set();
      var set2 = new Set();
      var set3 = new Set();

      function add(users, price, shape, kinds, callback) {
        for (var foods in users) {
          if (shape) {
            for (var i = 0; i < shape.length; i++) {
              if (users[foods]['shape'] == shape[i]) {
                set1.add(foods);
              }
            }
          } else {
            set1.add(foods);
          }
          if (kinds) {
            for (var j = 0; j < kinds.length; j++) {
              if (users[foods]['kinds'] == kinds[j]) {
                set2.add(foods);
              }
            }
          } else {
            set2.add(foods);
          }
          if (!price || (price&&users[foods]['price'] <= Number(price)+5000 && users[foods]['price'] >= Number(price)-5000)) {
            set3.add(foods);
            console.log(users[foods]['price']);
          }
        }
        console.log(shape);
        console.log(kinds);
        console.log(set1);
        console.log(set2);
        console.log(set3);
        // console.log('shapeleng:' + shape.length);
        // console.log('kinds leng:' + kinds.length);
        callback(set1, set2, set3);
      }

      add(users, price, shape, kinds, function(set1, set2, set3) {
        let difference1 = new Set([...set1].filter(i => set2.has(i)));
        let difference2 = new Set([...difference1].filter(i => set3.has(i)));
        var list = {
          food: [...difference2]
        };
        fs.writeFile('data/temp.json', JSON.stringify(list), "utf8", function(err) {
          if (err) {
            console.log(err);
            res.status(500).send('Internal Server Error');
          } else {

            fs.readFile('data/temp.json', 'utf8', function(err, data) {
              if (err) {
                console.log((err));
                res.status(500).send('Internal Server Error');
              } else {
                var food = JSON.parse(data)['food'];
                var length = food.length;
                var rand = Math.floor(Math.random() * length); //(Math.random() * (max - min)) + min
                var food_value = food[rand];
                console.log(rand);
                res.render('print.ejs', {
                  title: 'Recommendation',
                  description: 'We recommend this...',
                  randvalue: food_value
                }); //rander closed
              }
            }); //readFile closed
          }
        }); //writeFile closed
      }); //add closed

    }
  }); //readFile closed
}); //post closed



app.listen(3000, function() {
  console.log('Connected, 3000');
})