遇到了猫鼬的问题。
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();
}
});这段代码按照预期工作,但我决定删除异步/等待并使用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:无法在标头发送到客户端后设置它们
我真的不知道我做错了什么。为什么抓不到承诺的例外呢?有什么建议吗?
发布于 2020-08-11 11:00:09
我认为问题产生于您在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)
});});
https://stackoverflow.com/questions/63356181
复制相似问题