如何在node.js服务器上接收“navigator.sendbeacon”发布的数据?

时间:2015-07-11 08:29:46

标签: javascript node.js

我正在使用新的浏览器功能(navigator.sendBeacon)将异步数据发送到node.js服务器。

但我无法在节点服务器上收到它。那么任何人都可以告诉我如何在节点服务器上接收sendBeacon发布的数据。

节点服务器代码是:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

// set cross origin header to allow cross-origin request.
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.use(bodyParser.json());

app.post('/',function(req,res){
    console.log('i got the request',req.body)
});

var server = app.listen(3000, function() {
    console.log('Express is listening to http://localhost:3000');
});

客户端代码

navigator.sendBeacon('http://localhost:3000/','{"a":9}')

1 个答案:

答案 0 :(得分:20)

navigator.sendBeacon POST使用Content-Type:text/plain;charset=UTF-8来传输字符串数据。所以只需添加bodyParser.text()来解析'text / plain'数据:

服务器:

...
app.use(bodyParser.json());
app.use(bodyParser.text());
...

客户端:

navigator.sendBeacon('http://localhost:3000/', JSON.stringify({a:9}));

更新

显然,您可以使用Blob在请求中添加Content-Type:application/json标题:

客户端:

var blob= new Blob([JSON.stringify({a:9})], {type : 'application/json; charset=UTF-8'}); // the blob
navigator.sendBeacon('http://localhost:3000/', blob )