bugfix> javascript > 投稿

nodeJSアプリがあります

navigator.userAgent を使用してクライアント側から取得したユーザーエージェント値を送信しようとしていますajaxを使用してサーバー側に。

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

alert(navigator.userAgent); を追加しました私のjavascriptコードにこれを手に入れました:

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

次の形式でサーバー側に送信するのはなぜですか?そして、どのように解析して読むことができますか?

回答 1 件
  • $.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 }));
    
    

あなたの答え