簡體   English   中英

無法使 mongoose find().then() 工作

[英]Can not make mongoose find().then() to work

面臨 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]:在將標頭發送到客戶端后無法設置標頭

我真的不知道我做錯了什么。 為什么捕獲沒有得到 promise 異常? 有什么建議嗎?

我認為問題出在您在catch塊中發送的響應,因為catch接受回調 function ,如果有任何錯誤,則返回錯誤。

嘗試這個:

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)
  });

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM