在尝试发布或获取以下代码请求后,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数据库中。