无法使猫鼬find()。then()工作

时间:2020-08-11 10:22:21

标签: javascript node.js express 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();
  }
});

此代码可以正常工作,但我决定删除异步/等待并改为使用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]:将标头发送到客户端后无法设置标头

我真的不知道我在做什么错。为什么渔获物没有得到应许例外?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我认为问题是由于您在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)
  });

});