2015-06-23 3 views
0

У этого вопроса есть много вопросов, поэтому, пожалуйста, несите меня. Я верю в крайний срок, и мне нужно хотя бы сделать кое-что из этого приложения. Я пытаюсь сохранить ссылки на видеоролики YouTube (с датами) в базе данных MongoDB, а затем получить к ним доступ каждый день (на основе даты) и поместить их в карусель.Ошибка Node.js MongoDB Express Mongoose App

Это приложение имеет два вида: видео-карусель, где будут показаны видеоролики YouTube (это должно сделать запрос GET в базу данных); и представление базы данных, которое: имеет форму для ввода новых видео-ссылок с датами; показывает хранилище данных, содержащее ссылки и даты YouTube; и позволяет пользователю удалять запись, если необходимо ввести новое видео для определенной даты.

Мой текущий код таким образом: Файл server.js, который запускает приложение, таким образом:

//grab express and Mongoose 
var express = require('express'); 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var bodyParser = require('body-parser'); 
var http = require('http'); 
var path = require('path'); 

//create an express app 
var app = express(); 

var routes = require('./routes/index'); 
var database = require('./routes/database'); 

//view engine setup 
    app.set('views', path.join(__dirname, 'views')); 
    app.set('view engine', 'jade'); 

//set up the connection to the static files 
    app.use('/public', express.static(__dirname + '/public')); 
    app.use(express.static(__dirname + '/public')); 


    app.use(bodyParser.json()); 
    //make the db accessible to the router 
    app.use(function(req, res, next) { 
     //req.db = db; 
     next(); 
    }); 
    //set up the routing 
    app.use('/', routes); 
    app.use('/database', database); 

//start the server on the port 8080 
app.listen(8080); 

//Send a message to the console 
console.log('The server has started'); 

А затем код для маршрута базы данных (database.js), где видео ссылки и даты вводятся, хранятся и отображаются (POST, GET, DELETE) выглядит следующим образом:

//Set up Express 
var express = require('express'); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var app = express(); 

//connect to the data store and the set up the database 
var db = mongoose.connection; 

//connect to the database 
mongoose.connect('mongodb://localhost/Mandela_Diaries'); 

//Create a model which connects to the schema and entries collection in the Mandela_Diaries database 
var Entry = mongoose.model("Entry", new Schema({date: 'date', link: 'string'}), "entries"); 

mongoose.connection.on("open", function() { 
    console.log("mongodb is connected!"); 
}); 


//The route for getting data for the database - GET form 
router.get("/database", function(req, res) { 
    //Send the current entries to the page 
    Entry.find({}, function(err, entries) { 
     console.log(entries); 
     if(err) { 
      res.status(404).json({"error": "not found", "err":err}); 
      return; 
     } 
     //res.json(data); 
     res.render(
      './views/database.html', {"root": __dirname + ''} 
      ); 
    }); 

}); 

//The route for posting data on the database - POST form 
router.post("/database", function(req, res) { 
    //test new post 
    console.log(req.body); 
    var newEntry = new Entry({entry: {'date': req.body.date, 'link': req.body.string}}); 
     newEntry.save(function(err, result) { 
      if (err !== null) { 
       //object was not save 
       res.status(500).json({error: "save failed", err: err}); 
        } else { 
       res.status(201).json(result); 
     }; 
    }); 
}); 

и коды маршрута индекса (так называемых домашней страницы, где видео ссылка будет идти в карусель) (GET) является следующим образом:

//Set up Express 
var express = require('express'); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var app = express(); 

/*connect to the data store on the set up the database 
var db = mongoose.connection; 

mongoose.connection.on("open", function() { 
    console.log("mongodb is connected!"); 
});*/ 

//create an express route for the home page at http://localhost:8080/ 
router.get('/', function(req, res) { 
    res.render('./views/index.html', {"root": __dirname + ''}); 
}); 

module.exports = router; 

И затем, наконец, HTML-файл для database.html, где база данных обновляется и показаны ниже:

<!DOCTYPE HTML> 
    <html> 
     <head> 
      <meta charset="UTF-8"> 
      <title>The Mandela Diaries</title> 

      <!-- For IE8 compatability mode --> 
      <meta http-equiv="X-UA-Compatible" content="IE=edge"> 

      <!-- To ensure that the website consumes all the space available inside the browser window --> 
      <meta name="viewport" content="width=device-width, initial-scale=1"> 

      <!-- The CSS files including Bootstrap and custom CSS --> 
      <!-- The CSS Bootstrap CSS file --> 
      <!-- <link rel="stylesheet" type="text/css" href="node_modules/bootstrap/dist/css/bootstrap.css"> --> 
      <link rel="stylesheet" type="text/css" href="../public/css/bootstrap.css"> 
      <link rel="stylesheet" type="text/css" href="../public/css/bootstrap-theme.css"> 
      <!-- The custom CSS files 
      <link rel="stylesheet" type="text/css" href="style.css"> --> 

      <!-- External scripts --> 
      <script type="text/javascript" src="public/js/script.js"></script> 


     </head> 
     <body> 
      <div class="container"> 
       <div class="row"> 
        <div class="col-s-12"> 
         <h1>The Mandela Diaries Database</h1> 
        </div> 
       </div> 
       <div class="row"> 
        <div class="col-s-4"> 
         <h3>Add Entry</h3> 
        </div> 
       </div> 
       <div class="row"> 
        <div class="col-s-12"> 
         <form class="form-inline"> 
          <div class="form-group"> 
           <label for="date">Date: </label> 
           <input type="date" class="form-control" id="date"> 
          </div> 
          <div class="form-group"> 
           <label for="link">Link: </label> 
           <input type="string" class="form-control" id="link"> 
          </div> 
          <button type="submit" class="btn btn-default">Submit</button> 
         </form> 
        </div> 
       </div> 
       <div class="row"> 
        <div class="col-s-12" id="entries"> 
         <ul></ul> 
        </div> 
       </div> 
      </div> 

      <script type="text/javascript" src="../public/js/jquery.js"></script> 
      <script type="text/javascript" src="../public/js/bootstrap.js"></script> 
     </body> 

    </html> 

И файл HTML для домашней страницы, где показана карусель ниже:

<!DOCTYPE HTML> 
    <html> 
     <head> 
      <meta charset="UTF-8"> 
      <title>The Mandela Diaries</title> 

      <!-- For IE8 compatability mode --> 
      <meta http-equiv="X-UA-Compatible" content="IE=edge"> 

      <!-- To ensure that the website consumes all the space available inside the browser window --> 
      <meta name="viewport" content="width=device-width, initial-scale=1"> 

      <!-- The CSS files including Bootstrap and custom CSS --> 
      <!-- The CSS Bootstrap CSS file --> 
      <!-- <link rel="stylesheet" type="text/css" href="node_modules/bootstrap/dist/css/bootstrap.css"> --> 
      <link rel="stylesheet" type="text/css" href="../public/css/bootstrap.css"> 
      <link rel="stylesheet" type="text/css" href="../public/css/bootstrap-theme.css"> 
      <!-- The custom CSS files 
      <link rel="stylesheet" type="text/css" href="style.css"> --> 


     </head> 
     <body id="container"> 
      <div class="span8"> 
    <div id="myCarousel" class="carousel slide"> 
     <ol class="carousel-indicators"> 
      <li data-target="#myCarousel" data-slide-to="0" class=""></li> 
      <li data-target="#myCarousel" data-slide-to="1" class="active"></li> 
      <li data-target="#myCarousel" data-slide-to="2" class=""></li> 
     </ol> 
     <div class="carousel-inner"> 
      <div class="item active"> 
       <iframe width="100%" height="100%" src="yesterday"></iframe> 
      </div> 
      <div class="item"> 
       <iframe width="100%" height="100%" src="today"></iframe> 
      </div> 
      <div class="item"> 
       <iframe width="100%" height="100%" src="tomorrow"></iframe> 
      </div> 
     </div> 
     <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> 
     <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> 
    </div> 
    </div> 

      <script type="text/javascript" src="../public/js/jquery.js"></script> 
      <script type="text/javascript" src="../public/js/bootstrap.js"></script> 
     </body> 

    </html> 

Я получаю кучу ошибок, даже если код работает. Во-первых, когда я пытаюсь получить доступ к индексу ('/'), я получаю ошибку: Error: Cannot find module 'html'. И когда я пытаюсь получить доступ ('/ database'), я получаю сообщение об ошибке: `Can not GET/database Я не знаю, где я здесь ошибся? Я пытаюсь экстраполировать много уроков, это в particular, но на этом этапе я полностью потерян.

+0

Возможно, вам потребуются более четкие стандарты. Если вы ищете эшафот, который помогает решить этот https://github.com/wolfdogg/expressBuilder. Это поможет ограничить ваши маршруты, используя уже описанные стандарты, и его простой ключ «под ключ», затем вы можете применить свои сценарии и html к этому эшафоту и продолжить работу с ним. :-) – blamb

ответ

0

Ну Cannot GET /database происходит потому, что маршрут вы создали, указывая на /database/database/, так как вы app.use('/database', database);, а затем, в вас routes/database вы router.get("/database", .... Вы можете решить эту проблему, изменив файл routes/database.js, чтобы получить / вместо /database.

Не уверен, что я ясно дал понять.

Другая проблема заключается в том, что вы используете jade в качестве механизма просмотра, но ваши взгляды html. Поэтому вам нужно изменить свои взгляды на нефрит или изменить механизм просмотра на html. Кроме того, путь к вашим представлениям неверен, так как вы находитесь внутри папки routes, и вы хотите перейти в папку views.

+0

Эй, парень. Спасибо за ответ. Я не понимаю, что вы говорите. Я изменил код в database.js на router.get ("/" ..), и теперь я получаю Не могу найти модуль 'html'. Каким будет лучший способ установки маршрутизаторов? – Siya

+0

Проблема не в ваших маршрутизаторах больше. – jsam

+1

Я сделал это [gist] (https://gist.github.com/joaosamouco/1afd05fa0db1350284aa) и обновил свой предыдущий ответ. Надеюсь, это поможет. – jsam

Смежные вопросы