【问题标题】:Unhandled Rejection (Error): Request failed with status code 404未处理的拒绝(错误):请求失败,状态码为 404
【发布时间】:2020-09-26 19:32:12
【问题描述】:

我正在尝试学习 MERN/CRUD,但在尝试 POST 到我的数据库时遇到了问题。尝试通过 Insomniac 访问它会给我一个“无法 POST /users”错误,控制台给我一个“未处理的拒绝(错误):请求失败,状态码 404”错误。

app.js

let express = require('express'),
    mongoose = require('mongoose'),
    dbConfig = require('./database/db'),
    cors = require('cors');

const userRoute = require('./routes/user.route');

mongoose.Promise = global.Promise;
mongoose.connect(dbConfig.db, {
    useNewUrlParser: true,
    useUnifiedTopology: true
}).then(() => {
    console.log('Connection established with database...') }, 
    error => { console.log(`Error when connecting to database: ${error}`); 
})

const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());

app.use('/users', userRoute);

const port = process.env.PORT || 4000;
const server = app.listen(port, () => {
    console.log(`Successfully connected on port: ${port}`)
});

create-user-component.js 的一部分

onSubmit(e) {
    e.preventDefault();
    
    const userObject = {
        firstName: this.state.firstName,
        lastName: this.state.lastName,
        email: this.state.email
    };

    axios.post('http://localhost:4000/users', userObject)
        .then(res => console.log(res.data));

    this.setState({ firstName: '', lastName: '', email: '' });
}

user.route.js

let mongoose = require('mongoose'),
    express = require('express'),
    router = express.Router();

let userSchema = require('../models/User');

// CREATE/POST User

router.route('/users').post((req, res, next) => {
    userSchema.create(req.body, (error, data) => {
      if (error) {
        return next(error)
      } else {
        console.log(data)
        res.json(data)
      }
    })
  });

router.route('/users').get((req, res) => {
    userSchema.find((error, data) => {
        if (error) {
            return next(error);
        } else {
            res.json(data);
        }
    })
})

router.route('/users/:id').get((req, res) => {
    userSchema.findById(req.params.id, (error, data) => {
        if (error) {
            return next(error);
        } else {
            res.json(data);
        }
    })
})

module.exports = router;

【问题讨论】:

    标签: node.js reactjs mongodb mongoose crud


    【解决方案1】:

    你可以这样试试吗?通过从路由中删除 users 语句。由于您已经在app.use('/users', userRoute); 中定义了它,因此 users.route.js 中定义的所有路由默认以users 开头。

    let mongoose = require('mongoose'),
        express = require('express'),
        router = express.Router();
    
    let userSchema = require('../models/User');
    
    // CREATE/POST User
    
    router.route('/').post((req, res, next) => {
        userSchema.create(req.body, (error, data) => {
          if (error) {
            return next(error)
          } else {
            console.log(data)
            res.json(data)
          }
        })
      });
    
    router.route('/').get((req, res) => {
        userSchema.find((error, data) => {
            if (error) {
                return next(error);
            } else {
                res.json(data);
            }
        })
    })
    
    router.route('/:id').get((req, res) => {
        userSchema.findById(req.params.id, (error, data) => {
            if (error) {
                return next(error);
            } else {
                res.json(data);
            }
        })
    })
    

    【讨论】:

    • 这似乎已经解决了!我想我没有注意到它正在路由到 /users/users。谢谢!
    猜你喜欢
    • 2021-07-26
    • 2018-06-10
    • 2018-12-21
    • 2020-09-18
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多