我有一个firebase项目,我开始使用firebase函数:their official docs.
但基本上,根据我的理解,简而言之,firebase函数允许您编写一些nodejs代码作为函数在其云托管服务器上作为后端工作。所以,我有一个按钮,必须从日历选择发送onClick startdate和enddate(我在控制台上测试,它将采用UNIX格式的所需格式),这里是代码:
$("#get_excel_button").click(function() {
var startdate = moment($("#filter_date_from").val(), "D MMMM, YYYY").unix();
var enddate = moment($("#filter_date_to").val(), "D MMMM, YYYY").unix();
$.ajax({
url: 'my-generated-function-url-after-deploy.cloudfunctions.net/getAjax',
data: '{startdate: startdate, enddate: enddate}',
type: 'POST',
success: function (data) {
var ret = jQuery.parseJSON(data);
$('#lblResponse').html(ret.msg);
console.log('Success: ')
},
error: function (xhr, status, error) {
console.log('Error: ' + error.message);
$('#lblResponse').html('Error connecting to the server.');
},
});
});
ajax必须在此node.js firebase函数上POST:
const functions = require('firebase-functions');
exports.getAjax = functions.https.onRequest((request, response) => {
var date = '';
var startdate = '';
var enddate = '';
request.on('data', function(data)
{
date += JSON.parse(data);
});
request.on('end', function()
{ console.log(date);
response.setHeader("Content-Type", "text/json");
response.setHeader("Access-Control-Allow-Origin", "*");
response.end(store);
});
});
但是当我尝试发送ajax时,我会在getAjax上获得状态码:408,为什么我会超时?
答案 0 :(得分:0)
您需要放置send();
,redirect();
或end();
等HTTP功能来完成请求并发送。
如果没有此功能,服务器将强制打开连接关闭为408代码。
我怀疑你放置了request.on('end', function() {response.end(store); })
,因为你没有从响应中获取状态代码才能结束它。
请在response.status(200).end();
内部使用此代码request.on();
它必须位于functions.https.onRequest();
编辑:
关于CORS ......
// Enable CORS using the `cors` express middleware.
cors(req, res, () => {
// ...
});