Я продолжаю получать статус 500 из-за Круговой структуры JSON - PullRequest
2 голосов
/ 19 апреля 2019

Я создаю микросервис, вызывая другой API внутри этого API. Другой API возвращает данные, но я продолжаю получать эту ошибку

Это ответ на платеж {success: true, json: 1} (узел: 31709) UnhandledPromiseRejectionWarning: TypeError: Преобразование циклического структура в JSON в JSON.stringify () в stringify (/Users/greatness/microservice/order/node_modules/express/lib/response.js:1119:12) на ServerResponse.json (/Users/alpha/setel/order/node_modules/express/lib/response.js:260:14) на router.post (/Users/alpha/setel/order/src/routes/order.js:59:21) в at process._tickCallback (internal / process / next_tick.js: 189: 7) (узел: 31709) UnhandledPromiseRejectionWarning: необработанное обещание отказ. Эта ошибка возникла из-за броска внутри асинхронного функционировать без блока catch или отклоняя обещание, которое было не обрабатывается с помощью .catch (). (код отклонения: 2)

router.post("/order", async (req, res) => {

    let paymentResponse;

    // Im using Mongoose
    const order = new Order()

   try {
        // Call the payment API
        paymentResponse = await axios.post('http://localhost:3002/api/v1/payment', {
            order
        })

    } catch (err) {

        res.status(500).json({
            success: false,
            message: err.message
        })
    }

    console.log("This is payment Response", paymentResponse.data)

    // Success change the order status to confirmed
    if (paymentResponse.data.json === 0) {
        order.status = "confirmed"
    } else {
        order.status = "declined"
    }

    order.save()
    res.status(200).json({
        success: true,
        paymentResponse,
        order
    })
})

Другой просто возвращает нормальный JSON

router.post("/v1/payment", async (req, res) => {

    try {


        // If 0 confirmed if 1 declined
        const randomResponse = Math.round(Math.random())
        res.status(200).json({
            success: true,
            json: randomResponse
        })

    } catch (err) {
        res.status(500).json({
            success: false,
            message: err.message
        })
    }
})

Что я могу сделать? Я продолжаю получать статус 500.

Привет.

1 Ответ

1 голос
/ 19 апреля 2019

Вы звоните json с таким:

res.status(200).json({
    success: true,
    paymentResponse, <---
    order
})

paymentResponse - это объект ответа от axios, это НЕ простой json, а скорее сложные объекты JS с методами, свойствами и циклическими ссылками. Что вы хотите сделать, это отправить только необработанные данные, как это:

res.status(200).json({
    success: true,
    paymentResponse: paymentResponse.data, <--- Make sure the response from payment is valid json!
    order
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...