Я не могу понять, где я ошибаюсь с этой простой задачей маршрутизации. Когда я перехожу на 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;
Пробовал, не сработало. Но спасибо.
Почему бы вам напрямую не использовать app.get ('/ staff', function () {}) вместо использования маршрутизатора. Вы можете передать приложение в качестве параметра в другом файле.
Скорее всего, вы получите эту ошибку в тегах HTML; Можете ли вы сказать мне серверную часть стека ошибок в вашем терминале?
Это странно, он не дает стек ошибок.
какая ошибка у вас на стороне сервера? Вы видите, что GET-запрос проходит с ошибкой 404 или вы не получаете никакого ответа от сервера?
Нет ответа, но похоже, что Санджай исправил это для меня. Спасибо за помощь.
Да, я это видел. Сервер не регистрирует ошибку, потому что он не получает запрос, а это означает, что существует проблема со способом настройки каталога, а пути к промежуточному программному обеспечению объявлены в app.js и в маршрутизаторе. Я предлагаю вам просмотреть каталог и правильно его структурировать, поскольку на данный момент это немного сбивает с толку. Добавьте в него подходящие модели и контроллеры. Также рекомендуется добавить промежуточное ПО для обработки ошибок сразу после app.use в app.js.
Я структурировал каталоги точно так же, как и экспресс-генератор. Однако мне нужно сделать обработчик ошибок.





неправильный объем измените порядок
app.use('/static', express.static(__dirname + './public'));
const staffRouter = require('./routes/staffrouter.js');
Спасибо, это сработало. Хотя не понимаю почему. Папка маршрутов не является общедоступной. Можешь сказать мне что случилось?
когда вы используете статическое промежуточное ПО, экспресс просматривает общедоступную папку, маршруты являются общедоступными, чтобы сделать ее доступной, это должно быть статично, надеюсь, вы ее получили
Express ищет файлы относительно статического каталога, поэтому имя статического каталога не является частью URL-адреса.
У меня была аналогичная проблема, когда в моей папке маршрута файл был назван post.js, но я использовал posts.js в файле server.js, опечатка.
Можно попробовать '/ staff' вместо './staff'