NodeJS: TypeError: Преобразование круговой структуры в JSON - PullRequest
0 голосов
/ 22 мая 2018

Я создал HTTP API, используя Express в Node.js для операций CRUD.Это работает частично, но когда я делаю запрос GET, появляется ошибка: TypeError: Converting circular structure to JSON.Другие методы HTTP (например, POST и DELETE) работают.

Это моя модель:

const mongoose = require('mongoose');

const coment = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    text: {type: String, required: true},
    author_coment: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    date: {type: Date, default: Date.now}
});

const vote = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    author_vote: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    vote: {type: Boolean, required: true},
    date: {type: Date, default: Date.now}
})


const book = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    title: {type: String, required: true},
    author: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    sinopsis: {type: String, required: true},
    text: {type: mongoose.Schema.Types.ObjectId, ref: 'Text'},
    creation_date:  {type: Date, default: Date.now},
    cover: {type: String},
    coments: [coment],
    votes: [vote]
});



module.exports = mongoose.model('Book', book);

Это моя GET функция:

// [GET: Book info]
router.get('/info/:book_id', function (req, res) {
    Book.findById(req.params.book_id, (err, book) => {
        if (err) return res.status(500).send(err);
        res.status(200).send(book);
    });
});

Вот моя модель пользователя:

const mongoose = require('mongoose');

const user = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: {type: String, required: true},
    email: {type: String, required: true},
    password: {type: String, required: true}
});

module.exports = mongoose.model('User', user);

Редактировать:

После некоторого копания я выяснил, в чем проблема, у меня была другая функция с таким URL: /: skip/: talk, поэтомувыполнил это вместо того, что я хотел.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Когда мне пришлось преобразовать круговую структуру в JSON, я использовал следующий маршрут:

route.post('/pay',async(req,res)=>{

  try {
    const link = 'https://app.sandbox.midtrans.com/snap/v1/transactions'

    const obj = {"transaction_details": {"order_id":"order-12","gross_amount": 5000}}

    const data = await axios.post(link,obj,
      { 
        headers : {
          "Accept": "application/json",
          "Content-Type": "application/json",
          Authorization: `Basic ${Base64.encode('*******')}`  
        }
      })


      const koin = data.data.token
      transaction.create({
        order_id : obj.transaction_details.order_id,
        gross_amount : obj.transaction_details.gross_amount,
        token : koin
      })
      console.log(data.data.token)

      res.json(data)
  } catch (error) {
    console.log(error)
  }

})
0 голосов
/ 22 мая 2018

Это потому, что вы не можете сериализовать объект, который имеет ссылку на себя.

Вот пример:

const foo = {};
foo.bar = foo

Здесь я создал объект с именем foo.Я добавил свойство с именем bar, ссылающееся на foo.

. Тогда объект foo больше не может быть сериализован, поскольку он имеет бесконечное "дерево свойств".Если вы используете пример, который я написал ранее, это совершенно правильно:

foo.bar.bar.bar.bar.bar.bar.bar

Единственное решение - извлечь нужные значения вручную.Вы можете облегчить процесс, используя деструктуризацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...