nodejs上的408 firebase函数从ajax调用

时间:2017-09-20 08:09:12

标签: javascript jquery node.js ajax firebase

我有一个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,为什么我会超时?

1 个答案:

答案 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, () => {
  // ...
});

https://firebase.google.com/docs/functions/http-events