Я работаю над приложением для ведения блога (нажмите на ссылку, чтобы увидеть репозиторий GitHub ) с Express, E JS и MongoDB.
По какой-то причине я не смог определить, когда (в браузере) я пытаюсь go сделать следующее: http://localhost:3000/dashboard
он (браузер) застревает в состоянии загрузки и никогда не загружает панель мониторинга. маршрут.
В индексе "entry". js файл, который у меня есть:
const express = require('express');
const dotenv = require('dotenv');
const mongoose = require('mongoose');
const path = require('path');
const morgan = require('morgan');
const expressLayouts = require('express-ejs-layouts');
const app = express();
dotenv.config();
//Conect to MONGODB
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
console.log('conected');
});
mongoose.connection.on('error', err => {
console.log(`DB connection error: ${err.message}`);
});
// Set static directory
app.use(express.static(path.join(__dirname, 'public')));
// Set views directory
app.set('views', path.join(__dirname, 'views'));
// Set view engine
app.set('view engine', 'ejs');
// Use Express Layouts
app.use(expressLayouts);
// Middleware
app.use(morgan('dev'));
// Bring the Posts Routes
const postsRoute = require('./routes/front-end/posts');
// Get Posts
app.use('/', postsRoute);
// Get Single Post
app.use('/:id', postsRoute);
// Bring the Dashboard
const dashboardRoute = require('./routes/admin/dashboard');
// Get Dashboard
app.use('/dashboard', dashboardRoute);
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}!`));
В маршруте панели инструментов (маршруты \ admin \ панель инструментов. js) У меня есть:
const express = require('express');
const dashboardController = require('../../controllers/admin/dashboard');
// Express router
const router = express.Router();
// Dysplay Dashboard
router.get('/dashboard', dashboardController.displayDashboard);
module.exports = router;
В то время как в контроллере приборной панели :
const Post = require('../../models/post');
exports.displayDashboard = (req, res, next) => {
res.send('Dashboard');
};
в routes/front-end/posts.js
У меня:
const express = require('express');
const postsController = require('../../controllers/front-end/posts');
// Express router
const router = express.Router();
// Get Posts
router.get('/', postsController.getPosts);
// Get Single Post
router.get('/:id', postsController.getSinglePost);
module.exports = router;
контроллер сообщений :
const Post = require('../../models/post');
exports.getPosts = (req, res, next) => {
const posts = Post.find({}, (err, posts) => {
if(err){
console.log('Error: ', err);
} else {
res.render('default/index', {
layout: 'default/layout',
website_name: 'MEAN Blog',
page_heading: 'XPress News',
page_subheading: 'A MEAN Stack Blogging Application',
posts: posts
});
}
});
};
exports.getSinglePost = (req, res, next) => {
let id = req.params.id;
if (id.match(/^[0-9a-fA-F]{24}$/)) {
Post.findById(id, function(err, post){
if(err){
console.log('Error: ', err);
} else {
res.render('default/singlepost', {
layout: 'default/layout',
website_name: 'MEAN Blog',
post: post
});
}
});
}
};
ВАЖНО: Необходимо, чтобы каждое отдельное сообщение отображалось под root url , например: http://localhost:3000/5e3063dbfa749d9229bab26f
, где 5e3063dbfa749d9229bab26f
- это, конечно, идентификатор сообщения.
Это для целей SEO. Я собираюсь позже заменить id на post slug : http://localhost:3000/my-great-post
.
Как мне этого добиться?