我是 Nodejs 新手。我有一个 MEAN 堆栈项目 employee
, department
和user roles
楷模。在创建employee
时我正在检查department
和userrole
const mongoose = require('mongoose');
const Employee = require('../models/employee');
const UserRoles = require('../models/userRole');
const Department = require('../models/department');
const _ = require('lodash');
exports.create_employee = (req, res, next) => {
Department.findById(req.body.deptID)
.then( dept => {
if( !dept ) {
return res.status(404).json({
message: 'Department not found'
});
}
return UserRoles.findById(req.body.userRoleID)
.then( role => {
if( !role ) {
return res.status(404).json({
message: 'User role not found'
});
}
const employee = new Employee({
_id: new mongoose.Types.ObjectId(),
name: req.body.name,
designation: req.body.designation,
doj: req.body.doj,
dob: req.body.dob,
bloodGroup: req.body.bloodGroup,
deptID: req.body.deptID,
userRoleID: req.body.userRoleID,
empCode: req.body.empCode
});
return employee.save();
})
})
.then(result => {
let ob = _.omit(result, ['__v']);
res.status(201).json({
createdEmployee: ob
});
})
.catch(err => {
res.status(500).json({
message: 'Internal Server Error'
});
});
};
当我尝试使用 deptID
创建员工时和userRoleID
哪些不存在于响应中,我得到的正确响应为 not found
。但在终端中出现以下错误
我认为我做了一些错误的返回,请纠正我!!
最佳答案
Response is already sent and again a response is being sent by MongoDB callback (UserRole). Your Department.findById and UserRoles.findById queries are independent to each other so here Promise chaining not required.
可以在此处找到有关响应 header 的写得很好的答案...
您可以尝试修改后的代码。
exports.create_employee = async (req, res, next) => {
try {
let dept = await Department.findById(req.body.deptID);
if (!dept) {
return res.status(404).json({
message: 'Department not found'
});
}
let role = await UserRoles.findById(req.body.userRoleID);
if (!role) {
return res.status(404).json({
message: 'User role not found'
});
}
// onward code will execute only when role and dept exists.
const employee = new Employee({
_id: new mongoose.Types.ObjectId(),
name: req.body.name,
designation: req.body.designation,
doj: req.body.doj,
dob: req.body.dob,
bloodGroup: req.body.bloodGroup,
deptID: req.body.deptID,
userRoleID: req.body.userRoleID,
empCode: req.body.empCode
});
const result = await employee.save();
let ob = _.omit(result, ['__v']);
res.status(201).json({
createdEmployee: ob
});
} catch (err) {
res.status(500).json({
message: 'Internal Server Error'
});
}};
关于node.js - 未处理的PromiseRejection警告: Error: Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53392335/