express - CORS 问题 vue/express/axios
问题描述
我有一个使用 ExpressJS api 的 VueJS 应用程序。尝试从前端登录页面表单中点击快速路由以通过 SendGrid 发送“联系我们”电子邮件,但在 heroku 上的生产中遇到代理错误。
这是我的组件中的方法:
async sendContactMessage() {
console.log('email valid? ', this.validateEmail(this.contactEmail))
if (!this.validateEmail(this.contactEmail)) {
this.contactNotice = "Please enter a valid email."
}
else if (this.contactMessage.length < 10) {
this.contactNotice = " The message is too short"
} else {
await MailersService.sendMessage({
email: this.contactEmail,
message: this.contactMessage
})
this.showContact = false
}
},
这是 MailersService 中的 api 调用:
sendMessage (params) {
let response = axios.post('/contacts/question', params)
if (response.status === 200) {
return response.data;
}
}
在快递方面,这是我发布的路线:
router.post('/question', async (req, res, next) => {
console.log('in Express, sending mail from contact form. this is request: ', req)
let newMessage = req.body
console.log("new message object is: ", newMessage)
const msg = {
to: 'contact@companydomain.com',
from: req.body.email, // Use the email address or domain you verified above
subject: 'Message from Beta Signup Form',
text: req.body.message
};
await sgMail.send(msg);
res.json({
success: true, message: 'ok'
}); // respond back to request
});
在 app.js for cors 中,我有:
app.use(cors());
app.use( function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
})
这在本地有效,但在 Heroku 上,它会引发错误:
Access to XMLHttpRequest at 'https://...-api.herokuapp.com/api/contacts/question' from origin 'https://....com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
解决方案
推荐阅读
- javascript - 在 Google Script(Google 电子表格)上记录更改
- solidity - 我试图剥离 synthetix 质押合约
- gradle - Gradle 无法下载依赖项
- elasticsearch - 如何在只有 1 个不同字段的弹性搜索中创建另一个类似的文档条目?
- flutter - **已解决** 在 dart、flutter 应用程序中检查或连续收听互联网连接/网络连接
- mongodb - TypeError:mongodb.ObjectId 不是构造函数
- terraform - terraform 模块的条件
- python - tensorflow 找不到带有数据集的图像
- android - 文本换行在 android TextView 中无法正常工作
- google-cloud-platform - 配置 GCP Cloud SQL 维护通知设置需要哪些权限?