Google-api-nodejs-client: TypeError: تحويل البنية الدائرية إلى JSON

تم إنشاؤها على ٣ فبراير ٢٠١٨  ·  3تعليقات  ·  مصدر: googleapis/google-api-nodejs-client

Hei Devs ،

في الإصدار الأحدث 25 يوجد خطأ في استجابة توقع CloudML. الاستجابة لها بنية دائرية ولا يمكن تحويلها إلى JSON. هنا الكود الخاص بي:

const google = require('googleapis');
const ml = google.ml('v1');

function auth(callback) {
    google.auth.getApplicationDefault(function (err, authClient) {
        if (err) {
            return callback(err);
        }
        if (authClient.createScopedRequired && authClient.createScopedRequired()) {
            // Scopes can be specified either as an array or as a single,
            // space-delimited string.
            authClient = authClient.createScoped([
                'https://www.googleapis.com/auth/cloud-platform',
            ]);
        }
        callback(null, authClient);
    });
}

/**
 * <strong i="7">@param</strong> {Function} callback Callback function.
 */
function getMLPrediction(data, callback) {
    auth(function (err, authClient) {
        if (err) {
            return callback(err);
        }
        ml.projects.predict({
            auth: authClient,
            name: 'projects/***/models/census',
            resource: data,
        }, (e, prediction) => {
            if (e) {
                return callback(e);
            }
            console.log(JSON.stringify(prediction)); <--------- This will crash
            console.log('Prediction:', prediction);
            callback(null, prediction);
        });
    });
}

لقد عدت إلى ^ 24.0.0 وكل شيء يعمل بشكل جيد.

اليك تحياتى،
eduDorus

التعليق الأكثر فائدة

تحيات! يقوم رد الاتصال بإرجاع كائن response ، والذي يحتوي على حقل بيانات. بدلا من هذا:

}, (e, prediction) => {
            if (e) {
                return callback(e);
            }
            console.log(JSON.stringify(prediction)); <--------- This will crash
            console.log('Prediction:', prediction);
            callback(null, prediction);
        });

افعل هذا!

}, (e, res) => {
            if (e) {
                return callback(e);
            }
            console.log(res.data); <--------- This will work :)
            console.log('Prediction:', res.data);
            callback(null, res.data);
        });

أتمنى أن يساعدك هذا!

ال 3 كومينتر

تحيات! يقوم رد الاتصال بإرجاع كائن response ، والذي يحتوي على حقل بيانات. بدلا من هذا:

}, (e, prediction) => {
            if (e) {
                return callback(e);
            }
            console.log(JSON.stringify(prediction)); <--------- This will crash
            console.log('Prediction:', prediction);
            callback(null, prediction);
        });

افعل هذا!

}, (e, res) => {
            if (e) {
                return callback(e);
            }
            console.log(res.data); <--------- This will work :)
            console.log('Prediction:', res.data);
            callback(null, res.data);
        });

أتمنى أن يساعدك هذا!

JustinBeckwith مرحبًا

""
const serviceRequest = calendarService.events.list ({
CalendarId: calendar_id ،
timeMin: (تاريخ جديد ()). toISOString () ،
maxResults: 50 ،
الأحداث: صحيح ،
OrderBy: "startTime"
})

محاولة {
في انتظار الخدمةطلب
} catch (e) {
إذا (e.status) res.status (e.status) .send (e.statusText)
خطأ المسجل (هـ)
res.status (500). إرسال (هـ)
}
""

uptownhr إذا كنت ترى الاستثناء عند استدعاء logger.error(e) ، أتساءل عما إذا كان المسجل الخاص بك يتصل بـ JSON.stringify على 'e'. لقد قدمت خطابًا عامًا خاصًا إلى Axios بخصوص هذا الأمر ، وقد يكون ذلك مفيدًا.

https://github.com/axios/axios/pull/1625

في حالتك ، قد تتمكن من التعامل مع هذا أو شيء مشابه:

logger.error({message: e.message, stack: e.stack})

يبدو أنه من الصعب حقًا بالنسبة لي أن أتذكر القيام بذلك ، ومعالجة الأخطاء أصبحت جاهزة لتغطية الكود المفقود ، لذلك قمت بتقديم العلاقات العامة أعلاه. (الأهم من ذلك ، بشكل منفصل ، أن رؤوس الطلبات في AxiosErrors المسلسلة بواسطة console.log() تحتوي على رموز حامل ، ولا أرغب في رؤية تلك الرموز في السجلات.)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات