我有一个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
为什么我将以下格式提供给服务器端?我怎么解析和阅读它?
答案 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 }));