GET和POST方法返回“ ENETUNREACH”错误

时间:2019-09-30 14:17:13

标签: javascript reactjs express postman

在尝试发布或获取以下代码请求后,firebase返回错误和ENETUNREACH错误时,我无法尝试解决此错误:

我在powershell和git bash中都使用firebase serve或firebase deploy,但是错误仍然存​​在。

如果任何人都可以告诉我我的代码或执行中有什么问题,请做出回应。谢谢你。

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);

请帮助我解决此问题。我正在使用React和Express的Firebase应用程序。 错误

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

任何帮助将不胜感激。谢谢!

我尝试在浏览器中运行本地主机,但发生相同的问题。

我的预期结果是将用户添加到Firebase数据库中。

0 个答案:

没有答案