我的Web应用程序类似于测验应用程序,用户应回答一个问题,服务器会将用户的结果存储在mongoDB数据库中。 我想要的是将文档保存在数据库中之后,我想获取此文档以将其发送给浏览器中的用户 保存笔记文档可以正常工作。 代码看起来像这样(假设用户的结果是10):
const User_Result = require("../models/result_model")
router.post("/quiz/results", (req, res)=>{
var result = new User_Result({
_id: req.user._id,
userResult: 10
})
result.save()
//that should get data and send it but it send empty []
User_Result.find({_id: req.user._id}).then(data=>{
res.send(data)
})
})
我认为在保存数据之前先查找数据的问题。
答案 0 :(得分:2)
您无需使用find
,因为.save()
将返回保存的文档,您可以使用它
异步/等待版本
router.post("/quiz/results", async (req, res)=>{
let result = new User_Result({
_id: req.user._id,
userResult: 10
})
const ReturnedResult = await result.save();
return res.status(201).json(ReturnedResult);
})
承诺版本
router.post("/quiz/results", (req, res) => {
let result = new User_Result({
_id: req.user._id,
userResult: 10
})
result.save()
.then(ReturnedResult =>return res.status(201).json(ReturnedResult))
.catch(err => return res.status(500).json(err))
})
答案 1 :(得分:1)
result.save()返回一个promise,您应该等待其解决:
result.save().then(() => {
User_Result.find({_id: req.user._id}).then(data=>{
res.send(data)
})
})
答案 2 :(得分:1)
router.post("/quiz/results", async (req, res)=>{
var result = new User_Result({
_id: req.user._id,
userResult: 10
})
const newResult = await result.save():
return res.send(newResult).status(201);
})