Wpis z mikrobloga

Napotykam na problem z moją funkcją Firebase Cloud obsługująca POST request. Celem jest wysłanie emaila za pomocą nodemailera, gdy POST request zostanie złożony do odpowiedniego end pointu. Jednak stale otrzymuję błąd "Cannot POST /", i mam trudności z zidentyfikowaniem przyczyny.

React:

const handleSubmit = async (e) => {
e.preventDefault();

try {
const response = await fetch("[https://us-central1-xxx.cloudfunctions.net/sendEmail",](https://us-central1-xxx.cloudfunctions.net/sendEmail",) {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(formData),
credentials: 'include',
});

// Handle response

Funkcja Cloud:

const corsOptions = {
origin: '[https://xxx.web.app](https://xxx.web.app)',
methods: 'POST',
allowedHeaders: ['Content-Type'],
credentials: true
};

app.use(cors(corsOptions));

// Rest of code
app.post('/send-email', (req, res) => {
// Handling email sending logic

transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error('Error sending email:', error);
res.header('Content-Type', 'application/json');
return res.status(500).json({ error: error.toString() });
}
console.log('Email sent:', info);
res.header('Content-Type', 'application/json');
res.json({ message: 'Email sent succesfully!' });
});
});

export const sendEmail = functions.https.onRequest(app);

Caly czas otrzymuję poniższy błąd przy wysyłaniu POST requesta do adresu URL funkcji Cloud:

XHRPOST
https://us-central1-xxx.cloudfunctions.net/sendEmail
[HTTP/3 404 Not Found 124ms]

Response { type: "cors", url: "https://us-central1-xxx.cloudfunctions.net/sendEmail", redirected: false, status: 404, ok: false, statusText: "Not Found", headers: Headers(3), body: ReadableStream, bodyUsed: false }

Już sprawdziłem konfigurację CORS, upewniłem się, że funkcja Cloud jest poprawnie zdeployowana, i zweryfikowałem URL używany w żądaniu fetch (tam mam cannot POST). Będę wdzięczny za wszelkie spostrzeżenia lub sugestie.

#naukaprogramowania #programowanie
  • 10
  • Odpowiedz
  • 0
@Dietetyq od trzech dni próbuje i bot jest bezradny. Cały czas to samo odpowiada, żeby zrobić deploy jeszcze raz, sprawdzić URL (no kutwa sprawdzam i jest error, cannot post) itp. W końcu po trzech dniach zwróciłem się do ludzi
  • Odpowiedz
@Ramboski: a na pewno ten URL jest taki jak tam podajesz, a na pewno tam jest metoda POST a nie GET, możesz wywołać tą metodę inaczej niż przed kod FE żeby upewnić się że jest ona prawidłowo zdefiniowana?
  • Odpowiedz
  • 0
@Dietetyq ten URL to dosłownie z milion razy sprawdziłem. Kopiowałem go zaraz po tym jak zrobiłem deploy, z resztą jak go zmieniałem to zupełnie mi wychodzi, że takiego nie ma na serwerze.
W komponencie mam przy fetchowaniu method: post, w funkcji firebase mam cors ustawiony też z opcją method: post.
Sprawdzałem URL przez curl i tam właśnie wyrzuca mi pusty HTML z title Error, a body Connot POST.
Jak najlepiej wywołać te
  • Odpowiedz
  • 1
@slowpx jak robiłem deploy funkcji to mi wyskoczyło, żeby użyć URL z sendEmail, bo tak eksportowalem funkcje. Sprawdzę to jak będę w domu, ale jeśli to jest przyczyną to masakra lol
  • Odpowiedz