404 Ошибка экспресс-маршрутизации

Я не могу понять, где я ошибаюсь с этой простой задачей маршрутизации. Когда я перехожу на localhost: 3030 / staff, я получаю «Cannot GET / staff» и ошибку 404.

Вот моя установка.

app.js:

const express = require('express');
const app = express();
const port = process.env.PORT || 3030;

const staffRouter = require('./routes/staffrouter.js');

app.use('/static', express.static(__dirname + './public'));

app.use('./staff', staffRouter);

app.get('/', function(req, res) {
    res.render('index.pug');
});

app.listen(port);

Я пробовал использовать пути "/ staff" в своих запросах GET / POST, но это не работает, и это не то, как это должно работать согласно руководству, которое я делаю. Я действительно застрял.

/routes/staffrouter.js:

var express = require('express');
var router = express.Router();

const staff = require('../staff').staff;
const urlEncoded = (express.urlencoded({ extended: true }));

router.get('/', function(req, res, next) {
    res.render('staff.pug', { 
        deptOptions: staff.populateSelectors('department'),
        posOptions: staff.populateSelectors('position'),
        empArray: staff.readWriteJSON()
    });
 });

// Add new staff obj
router.post('/', urlEncoded, function(req, res, next) {
    let sObj = req.body;
    let dataArray = staff.readWriteJSON();

    //console.info('data:', data);
    dataArray.push(new staff.Employee(
        sObj.fName, 
        sObj.lName, 
        sObj.staffNum, 
        sObj.department, 
        sObj.position, 
        sObj.email, 
        sObj.phone
     ));
    staff.readWriteJSON(dataArray)
    res.render('../views/staff.pug', { 
        deptOptions: staff.populateSelectors('department'),
        posOptions: staff.populateSelectors('position'),
        empArray: staff.readWriteJSON()
    });
});

module.exports = router;

Можно попробовать '/ staff' вместо './staff'

Vishal-Lia 14.05.2018 11:44

Пробовал, не сработало. Но спасибо.

Cuckoo 14.05.2018 11:45

Почему бы вам напрямую не использовать app.get ('/ staff', function () {}) вместо использования маршрутизатора. Вы можете передать приложение в качестве параметра в другом файле.

Vishal-Lia 14.05.2018 11:47

Скорее всего, вы получите эту ошибку в тегах HTML; Можете ли вы сказать мне серверную часть стека ошибок в вашем терминале?

rags2riches 14.05.2018 11:51

Это странно, он не дает стек ошибок.

Cuckoo 14.05.2018 11:52

какая ошибка у вас на стороне сервера? Вы видите, что GET-запрос проходит с ошибкой 404 или вы не получаете никакого ответа от сервера?

rags2riches 14.05.2018 11:54

Нет ответа, но похоже, что Санджай исправил это для меня. Спасибо за помощь.

Cuckoo 14.05.2018 11:57

Да, я это видел. Сервер не регистрирует ошибку, потому что он не получает запрос, а это означает, что существует проблема со способом настройки каталога, а пути к промежуточному программному обеспечению объявлены в app.js и в маршрутизаторе. Я предлагаю вам просмотреть каталог и правильно его структурировать, поскольку на данный момент это немного сбивает с толку. Добавьте в него подходящие модели и контроллеры. Также рекомендуется добавить промежуточное ПО для обработки ошибок сразу после app.use в app.js.

rags2riches 14.05.2018 12:04

Я структурировал каталоги точно так же, как и экспресс-генератор. Однако мне нужно сделать обработчик ошибок.

Cuckoo 14.05.2018 13:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

неправильный объем измените порядок

app.use('/static', express.static(__dirname + './public'));
const staffRouter = require('./routes/staffrouter.js');

Спасибо, это сработало. Хотя не понимаю почему. Папка маршрутов не является общедоступной. Можешь сказать мне что случилось?

Cuckoo 14.05.2018 11:55

когда вы используете статическое промежуточное ПО, экспресс просматривает общедоступную папку, маршруты являются общедоступными, чтобы сделать ее доступной, это должно быть статично, надеюсь, вы ее получили

Sanjay 14.05.2018 13:03

Express ищет файлы относительно статического каталога, поэтому имя статического каталога не является частью URL-адреса.

Sanjay 14.05.2018 13:08

У меня была аналогичная проблема, когда в моей папке маршрута файл был назван post.js, но я использовал posts.js в файле server.js, опечатка.

Zeba 13.02.2020 06:50

Другие вопросы по теме