为什么邮递员返回的HTML错误而不是数据?

时间:2020-07-31 20:56:58

标签: javascript node.js mongodb postman

我有以下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中: enter image description here

我能够在Postman中显示所有任务,如下所示: enter image description here

但是我无法搜索一个ID: enter image description here

这是我在此处设置的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

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

如果我的问题措辞不好,我很抱歉,我很新。请不要犹豫,要求提供任何有助于澄清我的问题的信息。为您的时间加油吧。

1 个答案:

答案 0 :(得分:0)

能够通过在路线的开头添加“ /”来解决该问题:

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();
    });
})