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