非常简单的获取请求会产生错误:'对ObjectId的投射失败'

问题描述 投票:0回答:2

所以我当时正在用邮递员测试我的后端,不知道目前到底发生了什么。我得到了文件users.js,在其中定义了一些路线。我通过以下方式将该文件导入到我的app.js中:

// Bring in the Users route
const users = require('./routes/api/users');
app.use('/api/users', users);

因此users.js中的所有api请求实际上都将进入/api/users/......

我在这里定义了一条简单的路线进行测试。

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

router.get('/', (req, res) => {
    res.send('hello world')
})

module.exports = router;

因此,如果我向邮递员发送请求至:http://localhost:5000/api/users/,我将返回响应:hello world

如果我ONLY

将端点更改为类似/test的内容,则会收到错误消息。换句话说,如果我将路线更改为:
const express = require('express');
const router = express.Router();

router.get('/test', (req, res) => {
    res.send('hello world')
})

module.exports = router;

然后再次向邮递员发送一个请求到http://localhost:5000/api/users/test,我得到以下错误消息:

{
    "stringValue": "\"test\"",
    "kind": "ObjectId",
    "value": "test",
    "path": "_id",
    "reason": {},
    "message": "Cast to ObjectId failed for value \"test\" at path \"_id\" for model \"Project\"",
    "name": "CastError"
}

有人知道发生了什么吗?我不明白为什么这行不通...

EDIT:

] >>

好,所以我知道了,但是我仍然不知道为什么它在方案1中起作用而在方案2中不起作用:

此作品:

router.get('/test', (req, res) => {
    res.send('hello world')
})

//load project
router.get('/:id', (req, res) => {
    Project.findById(req.params.id)
        .then(projectFound => {
            res.status(200).send(projectFound)
        })
        .catch(err => {
            res.status(500).send(err)
        })
})

没有

的工作:
//load project
router.get('/:id', (req, res) => {
    Project.findById(req.params.id)
        .then(projectFound => {
            res.status(200).send(projectFound)
        })
        .catch(err => {
            res.status(500).send(err)
        })
})

router.get('/test', (req, res) => {
    res.send('hello world')
})

所以我当时正在用邮递员测试我的后端,不知道目前到底发生了什么。我有一个文件users.js,其中定义了一些路由。我使用以下命令将该文件导入到我的app.js中:// ...

node.js express postman
2个回答
1
投票

控制器优先顺序

:id是变量。首先声明router.get('/:id', (req, res)时,将永远不会执行test方法。


0
投票

我得到了一个文件users.js,在其中定义了一些路由。

© www.soinside.com 2019 - 2024. All rights reserved.