получение кода ошибки «не удается ПОЛУЧИТЬ /администратор/добавить продукт»

#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