在nodeJS

时间:2018-05-25 14:56:17

标签: javascript node.js

我有一个nodeJS app

我正在尝试使用ajax将使用navigator.userAgent从客户端获取的用户代理值发送到服务器端。

PS:我知道我可以从服务器访问用户代理。我知道这一点。我这样做是出于某种目的。

如下:

window.addEventListener('DOMContentLoaded', async() => {
            $.ajax({
            type:'POST',
            url:'/UA/send/',
                    data: navigator.userAgent })             
});

在我的nodeJS服务器中,我正在读它:

app.post('/UA/send', function(req, res) 
{  
        console.log(req.body));
});

返回

{ 'Mozilla/5.0 (X11; Linux x86_64) Chrome/64.0.3282.140 Safari/537.36': '' }

我在我的javascript代码中添加了alert(navigator.userAgent);,我得到了这个:

Mozilla/5.0 (X11; Linux x86_64) Chrome/64.0.3282.140 Safari/537.36

为什么我将以下格式提供给服务器端?我怎么解析和阅读它?

1 个答案:

答案 0 :(得分:0)

使用$.ajax发布JSON时,您必须使用JSON.stringify'Content-Type': 'application/json'标头,否则您将发送表单数据。在您的示例中,您将用户代理作为密钥发送,而没有值。

发布对象的原因如下:{ [userAgentValue]: ''}

使用此功能发布JSON。

 $.ajax({
      type:'POST',
      url:'/UA/send/',
      headers: { 'Content-Type': 'application/json' },
      data: JSON.stringify({ userAgent: navigator.userAgent })
 });

使用服务器上正确的身体解析器:

app.use(bodyParser.json());

现在您将收到:

{ userAgent: 'Mozilla/5.0 (X11; Linux x86_64) Chrome/64.0.3282.140 Safari/537.36' }

如果您没有尝试发布JSON,并且您正在使用:application/x-www-form-urlencoded

$.ajax({
     type:'POST',
     url:'/UA/send/',
     data: { userAgent: navigator.userAgent }
 });

在您的服务器上:

app.use(bodyParser.urlencoded({ extended: false }));