我很难开始使用Google Cloud功能。 具体而言,制作一个简单的HTTP POST请求。
Cloud Function看起来像这样:
const express = require('express')
const errorhandler = require('errorhandler')
const logger = require('morgan')
const bodyParser = require('body-parser')
const cors = require('cors')
let app = express()
app.use(bodyParser.json())
app.use(logger('dev'))
app.use(errorhandler())
app.use(cors({origin: true}))
exports.helloWorld = (req, res) => {
// Example input: {"message": "Hello!"}
if (req.body.message === undefined) {
// This is an error case, as "message" is required.
res.status(400).send('No message defined!');
} else {
// Everything is okay.
console.log(req.body.message);
res.status(200).send('Success: ' + req.body.message);
}
};
我从一个简单的表单HTML文件和一个看起来像这样的JS文件发出HTTP请求:
const sendMessage = () => {
const input = {
"message" : document.getElementById('message').value
}
fetch('https://google-cloud-url-endpoint', {
method: 'POST',
headers: { "Content-Type": "application/json"},
body: JSON.stringify(input)
}).then(function(response) {
return response.json()
}).then(function(data) {
})
}
在HTML表单中输入消息后,控制台会说:
选项https://https://google-cloud-url-endpoint 400() index.html:1无法加载https://google-cloud-url-endpoint:对预检请求的响应未通过访问控制检查:否' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://127.0.0.1:53922'因此不允许访问。响应的HTTP状态代码为400.如果不透明的响应符合您的需求,请将请求的模式设置为“no-cors'在禁用CORS的情况下获取资源。 index.html:1未捕获(在承诺中)TypeError:无法获取
检查网络响应时,我看到:
没有定义消息!
因此,根据我的理解,它会发出请求并从函数中获取响应。我的问题是,为什么它没有成功发送消息'功能?
答案 0 :(得分:1)
解决方案:
这是我的客户端JS代码:
function sendMessage() {
var message = document.getElementById('message').value
var data = JSON.stringify({
"message": message
});
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://us-central1-stripe-
update.cloudfunctions.net/function-1");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(data);
}
以下是Google Cloud Functions代码:
exports.helloWorld = (req, res) => {
// Example input: {"message": "Hello!"}
//set JSON content type and CORS headers for the response
res.header('Content-Type','application/json');
res.header('Access-Control-Allow-Origin', 'http://localhost:8000');
res.header('Access-Control-Allow-Headers', 'Content-Type');
res.header('Access-Control-Allow-Credentials', 'true');
//respond to CORS preflight requests
if (req.method == 'OPTIONS') {
res.status(204).send('');
}
if (req.body.message === undefined) {
// This is an error case, as "message" is required.
res.status(400).send('No message defined!');
} else {
// Everything is okay.
console.log(req.body.message);
res.status(200).send('Success: ' + req.body.message);
}
};