通過從郵遞員那里保存資料,我想從MongoDB獲得一個回應,包括新創建的檔案
。代碼
async save(req, res){
const {score, multiplier, level} = req.body;
const scores = new Result({score, multiplier, level})。
const savedRes = await scores.save()。 then(resp=> {
return resp
.sendStatus(200)
.send({
message:'new record is saved',
data: savedRes
})
}).catch(error=>res。 sendStatus(500).send(error))
mongo配置
const app = express()
mongoose.connect(process.env.MONGODB_URL,{
useNewUrlParser。true,
useUnifiedTopology: true。
})
const con= mongoose.connection。
try{
con.on('open',() => console. log('db connected'))
} catch(error){
console.log(error)
}
app.use(cors({origin:"*"/span>})
實際結果
- 在MongoDB Atlas中創建了檔案,在
postman回復體中出現了(node:96318) UnhandledPromiseRejectionWarning的<代碼>內部服務器錯誤代碼>。錯誤[ERR_HTTP_HEADERS_SENT]。在頭資訊被發送到客戶端后無法設定頭資訊在vscode終端 。
預期的結果
{
message: '新記錄被保存'。
data: {
level: 1,
multiplier:8。
}
uj5u.com熱心網友回復:
從檔案來看,res.sendStatus(..)做了:
將回應的HTTP狀態代碼設定為statusCode,并將注冊的狀態資訊作為回應的正文發送出去。 注冊的狀態資訊作為文本回應體。如果指定了一個未知的 狀態代碼,回應主體將只是代碼 數字。
所以它已經發送了一個回應,而你之后試圖通過res.send(..)來發送一個回應。你應該只通過res.status(<statusCode>)來設定狀態。但是,由于默認的狀態代碼是200,你可以簡單地做到:
const {score, multiplier, level} = req.body;
const scores = new Result({score, multiplier, level})。
const savedRes = await scores.save()。
res.send({ message:'new record is saved', data: savedRes }) 。
uj5u.com熱心網友回復:
不要同時使用res.sendStatus和res.send。你可以使用res.status(200).json({sample : "sample"})來指定回應狀態代碼和回應體。
async save(req, res){
const {score, multiplier, level} = req.body;
const scores = new Result({score, multiplier, level})。
try{
const savedRes = await scores.save()。
res.status(200) 。 json({ message:'新記錄被保存', data: savedRes });
}catch(err){
res.status(500).json({
Message:"內部服務器錯誤"。
Info: err
})
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324508.html
標籤:
上一篇:如何使用MongoDBfind()查詢來匹配兩個不同的Objectids?
下一篇:結合管道dplyr命令
