代码之家  ›  专栏  ›  技术社区  ›  HelpASisterOut

在nodejs中解析从客户机到服务器的值格式

  •  2
  • HelpASisterOut  · 技术社区  · 6 年前

    我有一个Nodejs应用程序

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

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

    如下:

    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': '' }
    

    我添加了 alert(navigator.userAgent); 对于我的javascript代码,我得到了:

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

    为什么我要将它以以下格式发送到服务器端?我该如何解析和阅读它呢?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Marcos Casagrande    6 年前

    发布JSON时使用 $.ajax ,你必须使用 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 })
     });
    

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

    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 }));