Методы GET и POST возвращают ошибку «ENETUNREACH» - PullRequest
0 голосов
/ 30 сентября 2019

У меня возникают проблемы при попытке исправить эту ошибку, когда firebase возвращает и ошибка ENETUNREACH после публикации или получения запроса следующего кода:

Я использую firebase serve или firebase deploy как в powershell, так и в git bash, ноошибка все еще там.

Если кто-нибудь может сказать мне, что не так с моим кодом или моим исполнением, пожалуйста, ответьте. спасибо тебе.

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const app = require('express')();
admin.initializeApp();

const firebaseConfig = {
    //apiKey info
  };

const firebase = require('firebase');
firebase.initializeApp(firebaseConfig);

const db = admin.firestore();

// gets documents from database on firebase

app.get('/screams', (req, res) => {
    db
        .collection('screams')
        .orderBy('createdAt', 'desc')
        .get()
        .then(data => {
            let screams = [];
            data.forEach(doc => {
                screams.push({
                    screamId: doc.id,
                    body: doc.data().body,
                    userHandle: doc.data().userHandle,
                    createdAt: doc.data().createdAt
                });
            });
            return res.json(screams);
        })
        .catch((err) => console.error(err));
});

// creates new scream

app.post('/scream', (req, res) => {
    if (req.method !== 'POST') {
        return res.status(400).json({ error: 'Method not allowed' });
    }

    const newScream = {
        body: req.body.body,
        userHandle: req.body.userHandle,
        createdAt: new Date().isISOString()
    };

    db
        .collection('screams')
        .add(newScream)
        .then(doc => {
            // use backticks because of code inside
            res.json({ message: `document ${doc.id} created successfully`});
        })
        .catch(err => {
            res.status(500).json({ error: 'something went wrong' });
            console.error(err);
        });
});

// Signup route
app.post('/signup', (req, res) => {
    const newUser = {
        email: req.body.email,
        password: req.body.password,
        confirmPassword: req.body.confirmPassword,
        handle: req.body.handle,
    };

    // TODO validate data
    db.doc(`/users/${newUser.handle}`).get()
        .then(doc => {
            if(doc.exists) {
                return res.status(400).json({ handle: 'this handle is already taken' })
            } else {
                return firebase
                    .auth()
                    .createUserWithEmailAndPassword(newUser.email, newUser.password);
            }
        })
        .then(data => {
            return data.user.getIdToken();
        })
        .then(token => {
            return res.status(201).json({ token })
        })
        .catch(err => {
        console.error(err);
        return res.status(500).json({ error: err.code });
        });
});

exports.api = functions.region('us-east4').https.onRequest(app);

Пожалуйста, помогите мне решить эту проблему. Я использую реагировать и приложение Firebase с Express. Ошибка

i  functions: Beginning execution of "api"
>  FetchError: Unexpected error determining execution environment: request to http://169.254.169.254/computeMetadata/v1/instance failed, reason: connect ENETUNREACH 169.254.169.254:80
>      at ClientRequest.<anonymous> (C:\Users\garyz\PycharmProjects\socialape\functions\node_modules\node-fetch\lib\index.js:1455:11)
>      at ClientRequest.emit (events.js:200:13)
>      at Socket.socketErrorListener (_http_client.js:410:9)
>      at Socket.emit (events.js:200:13)
>      at emitErrorNT (internal/streams/destroy.js:91:8)
>      at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
>      at processTicksAndRejections (internal/process/task_queues.js:84:9) {
>    message: 'Unexpected error determining execution environment: ' +
>      'request to ' +
>      'http://169.254.169.254/computeMetadata/v1/instance ' +
>      'failed, reason: connect ENETUNREACH 169.254.169.254:80',
>    type: 'system',
>    errno: 'ENETUNREACH',
>    code: 'ENETUNREACH',
>    config: {
>      url: 'http://169.254.169.254/computeMetadata/v1/instance',
>      headers: { 'Metadata-Flavor': 'Google' },
>      retryConfig: {
>        noResponseRetries: 0,
>        currentRetryAttempt: 0,
>        retry: 3,
>        retryDelay: 100,
>        httpMethodsToRetry: [Array],
>        statusCodesToRetry: [Array]
>      },
>      responseType: 'text',
>      timeout: 3000,
>      params: [Object: null prototype] {},
>      paramsSerializer: [Function: paramsSerializer],
>      validateStatus: [Function: validateStatus],
>      method: 'GET'
>    }
>  }
i  functions: Finished "api" in ~1s

Любая помощь будет принята с благодарностью. Спасибо!

Я попытался запустить localhost в браузере, но возникла та же проблема.

Мои ожидаемые результаты - добавить пользователей в базу данных firebase.

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