Express无法从客户端正确获取json数据
express can't get json data correctly from client
这是我的客户端ajax代码:
var sendData = JSON.stringify({
name: document.forms["token"].name.value,
password:document.forms["token"].password.value
});
$.ajax({
url:'http://localhost:8088/log/',
type:'POST',
contentType:'application/json',
data: sendData,
dataType:"json"
})
,这里是我的节点服务器代码:
const http = require('http');
const express = require("express");
const jwt = require('jwt-simple');
const moment = require('moment');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
var expires = moment().add(7,'days').valueOf();
var token;
app.set("jwtTokenSecret","luo");
app.use(bodyParser.urlencoded({ extended: false }));
app.all("/log",function(req,res){
var name = req.body.name;
var password = req.body.password;
console.log(name,password)
...
}
我发现节点服务器上的名称和密码都没有定义,客户端上的json数据是正确的。我已经尝试了很多方法来解决它,但是我不能,我需要你的帮助,谢谢。
$.ajax
已经序列化了数据,因此,如果您已经将dataType
设置为'json',则没有必要使用JSON.stringify
。
在我的例子中,我让ajax调用像这样的东西。
从客户端进行ajax调用:
function _sendData(){
var host= 'localhost'; //or you can set your host by your choice.
$.post(host+'/post',$('#horizontalForm').serialize(),function(response){
// respose
});
}
从node.js
服务器端代码给出如下,
var qs = require('querystring');
app.post('/post',function(req,res){
if(req.method=='POST'){
var body='';
req.on('data',function(data){
body+=data;
console.log("before proccess = "+body);
if (body.length > 1e6) {
// FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST
request.connection.destroy();
}
})
req.on('end',function(){
var post = qs.parse(body);
console.log(post.user);
console.log(post.message);
})
}
})
和HTML部分就像
<form method="POST" action="/post" id="horizontalForm">
<p class="lead">
<input type="text" name="user" value="testUser" id="userId"/>
<div>
<input type="text" name="message" id="messageId"/>
<input type="button" value="Send" class="btn btn-lg btn-default" id="getData" onclick="_sendData();"/>
</div>
</p>
</form>
N。B:安装查询字符串可以运行命令npm install querystring --save
不要忘记在你的html中包含jquery.js
和ajax
库
使用console.log('values',document.forms["token"])
表达式检查document.forms["token"]
是否包含name
和password
如果有值,
然后调用api
var sendData = {
name: document.forms["token"].name.value,
password: document.forms["token"].password.value
};
var saveData = $.ajax({
url: 'http://localhost:8088/log/',
type: 'POST',
contentType: 'application/json',
data: sendData,
dataType: "text",
success: function(resultData) { alert("Save Complete") }
});
saveData.error(function() { alert("Something went wrong"); });
相关文章:
- 如何使用 Node JS 获取 JSON 嵌套数组值
- 使用Javascript/JQuery获取JSON GET数据
- 在jQuery中获取JSON
- 如何使用jQuery按键搜索和获取json行数据
- 如何使用jquery获取Json的节点
- 通过字符串获取JSON对象
- 通过Azure存储以HTML形式获取JSON文件
- 获取JSON并使用Javascript解析为字符串
- 如何在angular中获取json对象的名称
- 如何使用angular获取json对象的名称
- 如何使用Ajax JQuery.ech()获取JSON值
- 可以't通过从googlemapapi获取json值
- 获取json结果的身份验证问题
- Javascript:获取 JSON 中的值计数
- 按服务获取JSON数据
- 如何使用javascript获取json元素
- 从javascript文件中获取JSON,并使用NodeJS在路由文件中显示
- 如何从给定的代码中获取JSON对象
- 获取 JSON 数据将数组项添加到变量
- 如何从具有动态可观察属性的淘汰对象中获取 JSON 字符串