我正在使用谷歌云功能,希望处理post请求提供的数据。
在网站上:
const Http = new XMLHttpRequest();
const url='https://us-central1-finitest-4aafb.cloudfunctions.net/create-user1';
Http.open("POST", url);
Http.send("name=Negan&password=Lucille");
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
在服务器上:
exports.helloWorld = (req, res) => {
res.set('Access-Control-Allow-Origin', "*");
res.set('Access-Control-Allow-Methods', 'GET, POST');
let message = 'User created ' + req.body.user;
res.status(200).send(message);
};
我如何使用";name=尼根&密码=Lucille";服务器上的数据?
由于您使用的是带有XMLHttpRequest()
的POST请求,因此需要通过请求主体获取参数,如下所示:
exports.helloWorld = functions.https.onRequest((req, res) => {
res.set('Access-Control-Allow-Origin', "*");
res.set('Access-Control-Allow-Methods', 'GET, POST');
console.log(req.body);
console.log(req.body.name);
console.log(req.body.password);
let message = 'User created ' + req.body.name;
res.status(200).send(message);
});
更多详细信息,请参阅文档。
在前端,您还需要将正确的内容类型(即application/x-www-form-urlencoded
(与请求一起发送,如下所示:
const Http = new XMLHttpRequest();
const url='https://us-central1-finitest-4aafb.cloudfunctions.net/helloWorld';
Http.open("POST", url);
// send the proper header information along with the request
Http.setRequestHeader(
'Content-type',
'application/x-www-form-urlencoded'
);
Http.send("name=Negan&password=Lucille");
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
如Ashish Kumar所解释的,如果您想将它们作为查询字符串参数,您需要将它们添加到URL中,而不是通过send()
,因为您使用POST。
const url='https://us-central1-finitest-4aafb.cloudfunctions.net/create-user1';
Http.open("POST", url + "?name=Negan&password=Lucille"); // Note the ?
Http.send();
在这种情况下,您可以使用req.query.name
。
此搜索结果中的更多详细信息:https://www.google.com/search?client=firefox-b-d&q=XMLHttpRequest.send%28%29+POST+查询字符串
最后,请注意,使用https://us-central1-finitest-4aafb.cloudfunctions.net/create-user1
,您调用的不是helloWorld
云函数,而是create-user1
云函数。
这些被称为请求查询,可以通过req.query
对象访问。因此,在您的情况下,您可以作为访问数据
req.query.name
req.query.password