#node.js #express
Вопрос:
это мой второй вопрос здесь о переполнении стека.
В настоящее время я прохожу курс по udemy на node.js от «0» до «эксперт», теперь имейте в виду, что мой carrer как разработчик фокусируется на интерфейсе, а не на бэк-энде или даже на среднем оборудовании, в частности, это просто курс, за который я заплатил, потому что я чувствую, что он очень хорошо дополняет мой carrer, и эта тема представляет для меня большой интерес.
Теперь о проблеме… Мы начали работать с мопсом и рулями, ранее мы работали с express.js. Каждый раз с тех пор, как я установил pug и перевел одну из страниц с веб-страницы, которую мы создаем на курсе, с ванильного html на pug, сервер выдает сообщение «не удается ПОЛУЧИТЬ /администратор/дополнительный продукт». Теперь я понимаю, что эта ошибка основана на логическом конце всего, потому что сервер четко заявляет, что он не может получить конкретный маршрут, по которому «add-product.html» код найден. Меня смущает то, что код такой же, как у учителя, и в видео эта ошибка не отображается, я попытался задать вопрос в качестве комментария в разделе комментариев курса, но на него не было ответа, и это мешает мне продолжить материал. Было бы очень полезно, если бы кто-нибудь здесь просмотрел код (который я опубликую в этом вопросе) и помог мне, потому что на данный момент я полностью потерян.
Большое вам спасибо сообщество переполнения стека
Код проекта:
app.js:
const path = require('path');
const http = require('http');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.set('view engine', 'pug');
app.set('views', 'views');
const adminData = require('./routes/admin');
const userRoutes = require('./routes/user');
app.use(bodyParser.urlencoded({extended: true }));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/admin', adminData.routes);
app.use(userRoutes);
// app.use((res, req, next) => {
// res.status(404).sendFile(path.join(__dirname, 'views', ''));
// });
const server= http.createServer(app);
server.listen(3000);
admin.js:
const path = require('path');
const express = require('express');
const rootDir = require('../util/path');
const router = express.Router();
const products = [];
router.get('/admin', (req, res, next) => {
res.sendFile(path.join(rootDir, 'views', 'add-product.html'));
});
router.post('/admin', (req, res, next) => {
products.push({title: req.body.title})
res.redirect('/');
});
exports.routes = router;
exports.products = products;
user.js:
const path = require('path');
const express = require('express');
const rootDir = require('../util/path');
const adminData = require('./admin');
const router = express.Router();
router.get('/', (req, res, next) => {
const products = adminData.products;
res.render('shop', {prods: products, docTitle: 'Shop'});
});
module.exports = router;
path.js:
const path = require('path');
module.exports = path.dirname(require.main.filename);
add-product.html:
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add product page</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/product.css">
</head>
<body>
<header class="main-header">
<nav class="main-header__nav">
<ul class="main-header__item-list">
<li class="main-header__item"><a class="active" href="/">SHOP PAGE</a></li>
</ul>
</nav>
</header>
<main>
<form class="product-form" action="/admin/add-product" method="POST">
<div class="form-control">
<label for="title">Title</label>
<input type="text" name="title" id="title">
</div>
<button type="submit">ADD PRODUCT</button>
</form>
</main>
</body>
</html>
магазин.мопс:
<!DOCTYPE html>
html(lang="en")
head
meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
meta(http-equiv="X-UA-Compatible", content="ie=edge")
title #{docTitle}
link(rel="Stylesheet", href="/css/main.css")
link(rel="Stylesheet", href="/css/products.css")
body
header.main-header
nav.main-header__nav
ul.main-header__item-list
li.main-header__item
a.active(href="/") Shop
li.main-header__item
a(href="/admin/add-product") Add Product
main
.grid
each product in prods
article.card.product-item
header.card__header
h1.product__title #{product.title}
.card__image
img( src="https://www.vecteezy.com/photo/1224769-open-book-on-dark-background", alt=" a book ")
.card__content
h2.product__price $19.99
p.product__description A ver interesting book about so many even more intersting things!
.card__actions
button.btn Add to Cart
Всем спасибо за потраченное время
Комментарии:
1. У вас есть это в репозитории git?
Ответ №1:
Не уверен, я думаю, что путь строк 11 и 15 в admin.js
должен быть '/add-product'
вместо '/admin'
. т. е.
router.get('/add-product', (req, res, next) => {
В вашем коде единственный маршрут в разделе /admin
— /admin/admin
с помощью метода GET
или POST
. Вы можете попробовать ПОЛУЧИТЬ /admin/admin
и посмотреть, соответствует ли это ожидаемому результату. если верно, это указывает на то, что вы написали неправильный путь в строках 11 и 15 в admin.js
Если вы хотите получить /admin/add-product
, вам понадобится маршрут , в admin.js
котором указан путь /add-product
, так как все запросы, начинающиеся с пути /admin
, обрабатываются adminData.routes
в строке 18 в app.js