首页 > 解决方案 > 如何解决在邮递员中继续加载的发布方法

问题描述

我是 Express.js、MongoDb 和 mongoose 的新手,我创建了 HTTP 请求方法,但是在运行 Post 方法时,什么也没做(没有保存在数据库中),邮递员继续加载,只有当我取消时它才会停止。我想知道我的代码有什么问题,谢谢。

这是我的路线文件'department.js':

const express = require("express");
const router = express.Router();
const Department = require("../models/department")

router.get("/v1/departments", async (req, res) => {
    try {
        const departments = await Department.find({ isDeleted: false })
        if (!departments) {
            return res.status(404).send()
        }
        res.status(200).send()
    } catch (error) {
        res.status(500).send(error)
    }
});

router.get("/v1/department/:id", async (req, res) => {
    //test if the department exist => by id
    const _id = req.params._id
    try {
        const depatment = await Department.findByid(_id, { isDeleted: false })
        if (!depatment) {
            return res.status(404).send()
        }
        res.status(200).send(depatment)
    } catch (error) {
        res.status(500).send(error)
    }
});

router.post("/department", async (req, res) => {
    const department = new Department(req.body) //this param is for testing the post methode by sending request from postman
    try {
        await department.save()
        // res.status(201).send(department)
    } catch (error) {
        res.status(500).send(error)
    }
});

router.put("/v1/department/:id", async (req, res) => {
    //updates , allowedUpdates ,isValideOperations : those constants are used for checking if the updated fields exists or not !
    //especially useful when testing the put method using postman 
    const updates = Object.keys(req.body)
    const allowedUpdates = ['name', 'email']
    const isValideOperations = updates.every((update) => allowedUpdates.includes(update)) //isValideOperations return true if all keys exists
    if (!isValideOperations) {
        return res.status(400).send({ error: 'Invalid updates' })
    }
    try {
        const _id = req.params.id
        const department = await Department.findByIdAndUpdate(_id)
        if (!department) {
            return res.status(404).send()
        }
        res.send(department)
    } catch (error) {
        res.status(500).send(error)
    }
})

//Safe delete by updating the field isDeleted to true
router.delete('/v1/department/:id', async (req, res) => {
    try {
        const _id = req.params.id
        const department = await Department.findByIdAndUpdate(_id, { isDeleted: true })
        if (!department) {
            return res.status(400).send()
        }
        res.status(200).send(department)
    } catch (error) {
        res.status(500).send(error)
    }
})

module.exports = router

这就是模型

const mongoose = require("mongoose");
const validator = require('validator')


const Department = mongoose.model('Department', {
    name: {
        type: String,
        required: true,
    }
    ,
    email: {
        type: String,
        required: true,
        trim: true,
        lowercase: true,
        validate(value) {
            if (!validator.isEmail(value)) {
                throw new Error('Invalid email!')
            }
        }
    }
    ,
    createdBy: {
        type: String,
        default: 'SYS_ADMIN'
    }
    ,
    updatedBy: {
        type: String,
        default: 'SYS_ADMIN'
    }
    ,
    createdAt: {
        type: Date
        // ,
        // default: Date.getDate()
    }
    ,
    updatedAt: {
        type: Date
        // ,
        // default: Date.getDate()
    },
    isDeleted: {
        type: Boolean,
        default: false
    }
})

module.exports = Department

this is Index.js (the main file)

const express = require("express");
const app = express()
const departmentRouter = require("../src/routes/department")


app.use(express.json())
app.use(departmentRouter)

//app.use('/', require('./routes/department'))


const port = process.env.PORT || 3000;//local machine port 3000
app.listen(port, () => (`Server running on local machine port ${port} `));

标签: node.jsmongodbexpresshttppostman

解决方案


为了让您在 Postman(或一般的 API 调用)中获得响应,您必须实际发回响应,无论它是否带有sendFile, render, json, send, etc. res.end这些方法都调用了返回数据的内置函数。但是你评论了res.send这是原因


推荐阅读