我目前正在构建自己的网站,该网站托管在GitHub Pages上。该应用程序是使用React.js构建的,此处显示的是联系表单。我遇到的问题是我无法通过网站上的表单向具有云功能服务的google云平台发送POST请求。我知道GCP上的Node.js代码正在运行,因为我可以使用Postman发送请求。
使用GCP日志,该函数能够解析POST:GCP Success with Postman
反应代码:
submitForm(event) {
const {name, email, subject, message} = this.state;
console.log("sending email...");
console.log(JSON.stringify({
name: name,
email: email,
subject: subject,
msg: message
}));
fetch('GCP_API_HTTP', {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({
name: name,
email: email,
subject: subject,
msg: message
})
}).then((response) => {
if (response.status === 200) {
return response.text();
} else {
this.setState({emailError: true});
return response.text();
}
})
}
GCP上使用的代码:
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey('API_KEY');
exports.contactMe = (req, res)=> {
let jsonBody;
switch (req.get('Content-Type')) {
// '{"name":"John"}'
case 'application/json':
jsonBody = req.body;
break;
// 'John'
case 'text/plain':
jsonBody = req.body;
break;
// 'name=John' in the body of a POST request (not the URL)
case 'application/x-www-form-urlencoded':
jsonBody = req.body;
break;
}
console.log(jsonBody);
let msg = {
to: '[email protected]',
from: {
email: jsonBody.email,
name: jsonBody.name
},
subject: jsonBody.subject,
text: jsonBody.msg
};
sgMail.send(msg);
res.send("received!");
res.end();
};
了解GitHub Pages
会发布您推送到存储库的所有静态文件非常重要。而且也很想注意...
GitHub Pages不支持服务器端语言,例如nodejs,python等。
由于POST
请求需要服务器端通信,因此您需要获取实际的服务器主机。 Here's a good read about Static sites by GitHub Pages