nodeJS-findOne查询并没有转换成JSON对象,即使查询结果很好



findOne能够在MongoDB中找到文档。但是,结果并没有呈现为JSON对象employeeLs。Findone结果被打印在控制台中,很明显查询返回了良好的结果。

我是Angular、NodeJS和MongoDB的新手。花了很多时间研究这个问题,但未能解决这个"问题";奇怪的";问题"奇怪的";因为findOne是由";employeeLs"并将预期结果直接传递给对象employeeL。此外,对于EmployeeL来说,这是对所有领域的直接要求。感谢您的帮助。

请在下面找到编码信息。

路线编码

const express = require('express');
const mongoose = require('mongoose');
//const Schema = mongoose.Schema;
const bodyParser = require('body-parser');
const { Console } = require('console');
const mongooseClient = require('mongoose');  /* this is important  */
var employeeLs = require('../model/staffLeave');
const staffLeaveRouter = express.Router();
const util = require('util');
staffLeaveRouter.use(bodyParser.json());
staffLeaveRouter.use(bodyParser.urlencoded({ extended: false }));
staffLeaveRouter.route('/:staff_id')
.get((req,res,next) => {
employeeLs.findOne({staff_id : req.params.staff_id}) 
.populate(staffRecords._id)
.then(result => { 
console.log(result);  
console.log('lllll - inside retreival by staffid',JSON.stringify(util.inspect(employeeLs,{showHidden:false,depth:5})));
/* console.dir(employeeLs,this.options); */
employeeLs : result;
}
)
.then((employeeLs) => {
if (employeeLs != null) 
{res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(employeeLs)}
else{
err = new Error('Staffleave using staff ID to find '+req.params.staff_id+' not found');
err.status = 404;
return next(err);
}

}, (err) => next(err))
.catch((err) => next(err));
})

模式编码

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
require('mongoose-currency').loadType(mongoose);
const Currency = mongoose.Types.Currency;
const staffLeaveSchema = new Schema({
_id: {type: mongoose.Types.ObjectId, required: true},
staff_id: {type: mongoose.Types.ObjectId, required: true,
ref: 'staffRecord'},
staffUsername: {type: String, required: true},   
year: {type: Number, required: true},
annualLeaveEntitlement: {type: Number, required: true},
carryOver: {type: Number, required: true},
thisYearTotalAllowed: {type: Number, required: true},
taken: {type: Number, required: false},
scheduled: {type: Number, required: false},
thisYearRemaing: {type: Number, required: false},
sickLeaveTaken: {type: Number, required: false},
maternityLeaveTaken: {type: Number, required: false},
noPayLeaveTaken: {type: Number, required: false},
familyLeaveTaken: {type: Number, required: false},
});
var staffLeave = mongoose.model('staffLeave', staffLeaveSchema);
module.exports = staffLeave;

从控制台日志中,findone结果返回,如下所示。然而,系统仍然表示employeeLs仍然为空。它没有按预期呈现。

{
_id: 5f069b7821233471ec530b80,
staff_id: 5edfd3bf07cc253f1065de24,
staffUsername: 'dwong',
year: 2020,
annualLeaveEntitlement: 10,
carryOver: 2,
thisYearTotalAllowed: 12,
taken: 0,
scheduled: 0,
thisYearRemaing: 12,
sickLeaveTaken: 0,
maternityLeaveTaken: 0,
noPayLeaveTaken: 0,
familyLeaveTaken: 0,
__v: 0
}

我真的不明白下面的代码想要实现什么:

.then(result => { 
console.log(result);  
console.log('lllll - inside retreival by staffid',JSON.stringify(util.inspect(employeeLs,{showHidden:false,depth:5})));
/* console.dir(employeeLs,this.options); */
employeeLs : result;
}
)

你想要下一个(秒(。然后从第一个得到结果。然后?如果是

.then(result => { return result })
.then((employeeLs) => {
if (employeeLs != null) 
{res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(employeeLs)}
else{
err = new Error('Staffleave using staff ID to find '+req.params.staff_id+' not found');
err.status = 404;
return next(err);
}

})

让我期待一下你想要实现什么,你想要用mongoose获取一个文档并将其作为响应json发送吗?我想你只需要这样的东西
staffLeaveRouter.route('/:staff_id')
.get((req,res,next) => {
employeeLs.findOne({staff_id : req.params.staff_id}) 
.populate(staffRecords._id)
.then(result => {
if (result) {
res.status(200).send({data : result}) 
} else {
res.status(204).end()
}
})
.catch(err => {
console.log(err)
res.status(500).send({ err : "error" })
})
})

相关内容

最新更新