我有一个反应联系表,带有一个Firebase云功能,可处理通过nodemailer发送电子邮件和axios发布请求以将数据存储在我的firestore数据库中。我在函数中使用CORS,但是在提交表单时仍在控制台中收到CORS错误。
从源'http://localhost:3000'到'https://.cloudfunctions.net/submit'的XMLHttpRequest的访问已被CORS策略阻止:所请求的资源上没有'Access-Control-Allow-Origin'标头。我花了大约2个小时的时间进行谷歌搜索,从阅读的内容来看,似乎我有const cors = require('cors')({origin:true});它应该工作。任何帮助都会很棒。
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const cors = require('cors')({origin: true});
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: gmailEmail,
pass: gmailPassword,
},
});
exports.submit = functions.https.onRequest((req, res) => {
cors(req, res, () => {
if (req.method !== 'POST') {
return;
}
const mailOptions = {
from: req.body.email,
replyTo: req.body.email,
to: gmailEmail,
subject: `${req.body.name} submitted a quote request!`,
text: req.body.message,
html: `<p>{req.body.message}</p>`,
};
mailTransport.sendMail(mailOptions).then(() => {
console.log('New email sent to:', gmailEmail);
res.status(200).send({ isEmailSend: true });
return;
});
});
});
// This snippet is in my contact.js component
const sendEmail = () => {
axios
.post(
'https://<myurl>.cloudfunctions.net/submit',
formData
)
.then((res) => {
db.collection('emails').add({
name: formData.name,
email: formData.email,
phone: formData.phone,
message: formData.message,
time: new Date(),
});
})
.catch((err) => {
console.log(err);
});
};
您有一个很小的错字。它发生了。
exports.submit = functions.https.onRequest((req, res) => {
cors(req, res, () => {
应该是
exports.submit = functions.https.onRequest((req, res) => {
cors()(req, res, () => {
^^