Helpex - Trao đổi & giúp đỡ Đăng nhập
34

Tôi đang sử dụng gói yêu cầu cho nodejs

tôi đang sử dụng mã này ở đây

 var formData = ({first_name:firstname,last_name:lastname,user_name:username, email:email,password:password});

  request.post({url:'http://localhost:8081/register', JSON: formData}, function(err, connection, body) {

exports.Register = function(req, res) {
    res.header("Access-Control-Allow-Origin", "*");
    console.log("Request data " +JSON.stringify(req));

ở đây tôi gặp lỗi này TypeError: Chuyển đổi cấu trúc hình tròn thành JSON

Ai có thể cho tôi biết vấn đề là gì không

Cảm ơn

34 hữu ích 3 bình luận 116k xem chia sẻ
10 trả lời 10
55

JSON không chấp nhận các đối tượng hình tròn - các đối tượng tự tham chiếu. JSON.stringify()sẽ xuất hiện một lỗi nếu nó gặp phải một trong những điều này.

Đối tượng request ( req) có bản chất là hình tròn - Node thực hiện điều đó.

Trong trường hợp này, bởi vì bạn chỉ cần đăng nhập nó vào bảng điều khiển, bạn có thể sử dụng chuỗi ký tự gốc của bảng điều khiển và tránh sử dụng JSON:

console.log("Request data:");
console.log(req);
55 hữu ích 5 bình luận chia sẻ
29

Tôi cũng gặp phải vấn đề này. Đó là bởi vì tôi đã quên chờ đợi một lời hứa.

29 hữu ích 2 bình luận chia sẻ
8

Hãy thử sử dụng gói npm này. Điều này đã giúp tôi giải mã cấu trúc res từ nút của mình trong khi sử dụng passport-azure-adđể tích hợp đăng nhập bằng tài khoản Microsoft

https://www.npmjs.com/package/circular-json

Bạn có thể xâu chuỗi cấu trúc vòng tròn của mình bằng cách thực hiện:

const str = CircularJSON.stringify(obj);

thì bạn có thể chuyển đổi nó thành JSON bằng trình phân tích cú pháp JSON

JSON.parse(str)
8 hữu ích 2 bình luận chia sẻ
2

sử dụng https://www.npmjs.com/package/json-stringify-safe này

var stringify = require('json-stringify-safe');
var circularObj = {};
circularObj.circularRef = circularObj;
circularObj.list = [ circularObj, circularObj ];
console.log(stringify(circularObj, null, 2));


stringify(obj, serializer, indent, decycler)
2 hữu ích 1 bình luận chia sẻ
1

Gặp phải vấn đề này trong cuộc gọi Node Api của tôi khi tôi lỡ sử dụng awaittừ khóa trong một asyncphương thức trước cuộc gọi trả về Promise. Tôi đã giải quyết nó bằng cách thêm awaittừ khóa.

1 hữu ích 0 bình luận chia sẻ
0

Tôi đã gặp sự cố này khi không sử dụng async / await trên một hàm không đồng bộ (lệnh gọi api). Do đó, việc thêm chúng / sử dụng các trình xử lý lời hứa đã giải quyết đúng lỗi.

0 hữu ích 0 bình luận chia sẻ
0

Đó là bởi vì bạn không có phản hồi không đồng bộ Ví dụ:

app.get(`${api}/users`, async (req, res) => {
    const users = await User.find()
    res.send(users);
   })
0 hữu ích 2 bình luận chia sẻ
0

Nếu bạn đang gửi phản hồi, Chỉ cần sử dụng awaittrước khi phản hồi

await res.json({data: req.data};
0 hữu ích 1 bình luận chia sẻ
0

Điều này là do các cấu trúc JavaScript bao gồm các tham chiếu vòng tròn không thể được tuần tự hóa bằng JSON.stringify "đơn giản" .

https://www.npmjs.com/package/circular-json được @Dinesh đề cập là một giải pháp tốt. Nhưng gói npm này đã không được dùng nữa.

Vì vậy, hãy sử dụng https://www.npmjs.com/package/flatted gói npm trực tiếp từ người tạo ra CircularJSON.

Cách sử dụng đơn giản. Trong trường hợp của bạn, hãy viết mã như sau

gói nhập khẩu

// ESM
import {parse, stringify} from 'flatted';

// CJS
const {parse, stringify} = require('flatted');

console.log("Request data " + stringify(req));
0 hữu ích 0 bình luận chia sẻ
-5

TypeError: Converting circular structure to JSON in nodejs: Lỗi này có thể được nhìn thấy trên Arangodb khi sử dụng nó với Node.js, vì bộ nhớ trong cơ sở dữ liệu của bạn bị thiếu. Nếu kho lưu trữ được tạo trong cơ sở dữ liệu của bạn, hãy kiểm tra trong giao diện web Aurangobi.

-5 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript json node.js , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading