首页 > 解决方案 > 为什么 Postman 返回带有错误的 HTML 而不是数据?

问题描述

我有以下 index.js 代码:

const express = require('express');
require('./db/mongoose');
const User = require('./models/user');
const Task = require('./models/task');

const app = express();
const port = process.env.PORT || 3000;

app.use(express.json());

app.post('/users', (req, res) =>{
    const user = new User(req.body);

    user.save().then(() => {
        res.status(201).send(user);
    }).catch((e) => {
        res.status(400).send(e);
    });
});

app.post('/tasks', (req, res) => {
    const task = new Task(req.body);

    task.save().then(() => {
        res.status(201).send(task);
    }).catch((e) => {
        res.status(400).send(e);
    });
});

app.get('/users', (req, res) => {
    User.find({}).then((users) => {
        res.send(users);
    }).catch((e) => {
        res.status(500).send();
    });
});

app.get('/users/:id', (req, res) => {
    const _id = req.params.id;

    User.findById(_id).then((user) => {
        if(!user){
            return res.status(404).send();
        }

        res.send(user);
    }).catch((e) => {
        res.status(500).send();
    });
});

app.get('/tasks', (req, res) => {
    Task.find({}).then((tasks) => {
        res.send(tasks);
    }).catch((e) => {
        res.status(500).send();
    });
});

app.get('tasks/:id', (req, res) => {
    const _id = req.params.id;

    Task.findById(_id).then((task) => {
        if(!task){
            return res.status(404).send();
        }

        res.send(task);
    }).catch((e) => {
        res.status(500).send();
    });
})

app.listen(port, () => {
    console.log('Server is on port ' + port);
});

我已插入任务,它们出现在 Robo 3T - 1.3 中: 在此处输入图像描述

我可以在 Postman 中显示所有任务,如下所示: 在此处输入图像描述

但我无法搜索单个 ID: 在此处输入图像描述

它返回我在这里设置的 404 错误:

Task.findById(_id).then((task) => {
    if(!task){
        return res.status(404).send();
    }

    res.send(task);
}).catch((e) => {
    res.status(500).send();
});

该 ID 直接从 Robo 3T 复制,但未显示。

来自 Robo 3T 的 ID:

ObjectId("5f22b25820e420212af69875")

所以,我正在寻找:5f22b25820e420212af69875

通过输入:localhost:3000/tasks/5f22b25820e420212af69875

有人对我在这里做错了什么有任何建议吗?我曾多次尝试重写代码,但无法找到解决方案。

如果我的问题措辞不当,我深表歉意,我是新手。请不要犹豫,要求任何有助于澄清我的问题的东西。为你腾出时间。

标签: javascriptnode.jsmongodbpostman

解决方案


能够通过在我的路线前面添加一个“/”来修复它:

app.get('/tasks/:id', (req, res) => {
    const _id = req.params.id;

    Task.findById(_id).then((task) => {
        if(!task){
            return res.status(404).send();
        }

        res.send(task);
    }).catch((e) => {
        res.status(500).send();
    });
})

推荐阅读