不能让猫鼬 find().then() 工作
Posted
技术标签:
【中文标题】不能让猫鼬 find().then() 工作【英文标题】:Can not make mongoose find().then() to work 【发布时间】:2020-12-01 00:02:11 【问题描述】:遇到了 Mongoose 的问题。
import express from 'express';
import Countries from '../models/countries.mjs';
const router = new express.Router();
router.get('/countries-data', async (req, res) =>
try
let countries =
await Countries.find()
.select(
'-_id specimenDate dailyLabConfirmedCases changeInDailyCases')
.sort('specimenDate');
if (!countries) return res.status(500).send();
res.json(countries);
catch (err)
res.status(500).send();
);
此代码按预期工作,但我决定删除 async/await 并改用 find().then():
import express from 'express';
import Countries from '../models/countries.mjs';
const router = new express.Router();
router.get('/countries-data', (_, res) =>
Countries.find()
.select('-_id specimenDate dailyLabConfirmedCases changeInDailyCases')
.sort('specimenDate')
.then((countries) =>
if (!countries) throw Error('no data');
res.json(countries);
)
.catch(res.status(500).send());
);
在尝试发送 json 数据时出现异常:
UnhandledPromiseRejectionWarning: 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头
我真的不知道我做错了什么。为什么 catch 没有得到承诺异常?有什么建议吗?
【问题讨论】:
.then 代码没有任何问题,但只是为了再次确定:在 res.json(countries); 之前添加 return; 【参考方案1】:我认为问题出在您在catch
块中发送的响应,因为catch
接受了一个回调函数,如果有任何错误,该函数会返回一个错误。
试试这个:
import express from 'express';
import Countries from '../models/countries.mjs';
const router = new express.Router();
router.get('/countries-data', (_, res) =>
Countries.find()
.select('-_id specimenDate dailyLabConfirmedCases changeInDailyCases')
.sort('specimenDate')
.then((countries) =>
if (!countries) throw Error('no data');
res.json(countries);
)
// refactor your code like this
.catch((err)=>
res.status(500).send(err)
);
);
【讨论】:
以上是关于不能让猫鼬 find().then() 工作的主要内容,如果未能解决你的问题,请参考以下文章