【问题标题】:NodeJs Route returns 404 in production but not in localNodeJs Route 在生产中返回 404,但在本地不返回
【发布时间】:2021-01-23 23:02:33
【问题描述】:

我正在开发我的第一个 NodeJS 应用程序。 我已经在本地环境中尝试了我的应用程序,它运行良好。所以我决定将它部署在我的共享主机上。

我遇到了一个路由器问题,它在生产环境中返回 404 但在本地没有。

我调用的路由:GET /match/getAllMatches

这是我的 app.js 文件:

    const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const sequelize = require('./config/database');
const bodyParser = require('body-parser');

const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const matchRouter = require('./routes/match.js');

const app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/match', matchRouter);
app.use('/api/auth', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

sequelize
    .authenticate()
    .then(() => {
      console.log('Connection has been established successfully.'); // eslint-disable-line no-console
    })
    .catch((err) => {
      console.error('Unable to connect to the database:', err); // eslint-disable-line no-console
    });

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
  next();
});

app.use(bodyParser.json());

module.exports = app;

这是我的 match.js 路由器文件:

    const express = require('express');
const router = express.Router();
const controller = require('../controllers/match');
const auth = require('../middleware/auth');

router.get('/getAllMatches', controller.getAllMatches);

module.exports = router;

这是我的小控制器文件:

const Event = require('../models/Event')

exports.createMatch = (req, res, next) => {
    delete req.body.id;
    const Event = new Event(...req.body);
    Event.save()
        .then(() => res.status(200).json({
            message:'Match créé avec succès'
        }))
        .catch((error) => res.status(400).json({ error : error }));
};

exports.getAllMatches = (req, res, next) => {
    Event.findAll()
        .then((events) => {
            res.status(200).json(events);
        })
        .catch((error) => {
            res.status(400).json({ error : error });
        })
};

您发现我的代码有问题吗?

【问题讨论】:

    标签: node.js express cpanel


    【解决方案1】:

    如果您将 app.use("/") 放在所有路线之前,那么其他路线怎么能起作用

    【讨论】:

    • 这不是你使用 app.use("/", someRoutes) 时的问题,它只是从 "someRoutes" 导入的所有路由的前缀
    • 确实不是问题所在。感谢您尝试帮助我;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多