我是Node.js的新手。我想要做的是以json格式发送一些数据,从客户端javascript到express.js服务器。一旦我能做到这一点,我将使用已发送到服务器的那些参数来进一步从MongoDB检索信息。客户端代码非常简单,只有一个点击事件:
$.ajax({
url: 'http://localhost:8020/1',
type: 'post',
dataType: 'jsonp',
data: JSON.stringify({name: "test"}),
contentType: 'application/json',
success: function(data){
alert("success");
alert(data);
}
});
在服务器端,代码如下所示:
var express = require('express');
var app = express();
var cons = require('consolidate'),
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server;
var mongoclient = new MongoClient (new Server('localhost', 27017,
{'native_parser' : true}));
var db=mongoclient.db('test');
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.get('/1', function (req, res) {
db.collection('test').findOne({}, function (err, doc){
console.log(doc);
});
console.log(JSON.stringify(req.body));
var x = req.body.name;
console.log(x);
res.send({});
});
app.post('/1', function (req, res){
db.collection('test').findOne({}, function (err, doc){
console.log(doc);
});
console.log(req.body);
});
mongoclient.open(function (err, mongoclient) {
if (err) throw err;
app.listen(8020);
console.log("listening on port 8020");
});
当我进行客户端ajax调用时,似乎服务器端代码成功返回了我的mongoDB数据库中的一个项目,但它无法捕获数据,这是{name:" test" } 在这种情况下。下面是触发click事件时服务器端控制台的输出:
{}
undefined
{ _id: 5522f3368d21ba45c6263402, apple: 'juice' }
有人对此有任何想法吗?这是否与跨域问题有关?非常感谢你!
答案 0 :(得分:0)
您正在发送jsonp
作为您的数据类型。我猜jQuery会为你创建一个jsonp
请求。你确定需要这样做吗?
您未在POST
路线回复。这将使请求无限期挂起。你必须回复:
app.post('/1', function (req, res){
db.collection('test').findOne({}, function (err, doc){
console.log(doc);
res.send(doc); // respond!
});
console.log(req.body);
});
答案 1 :(得分:0)
首先将数据作为JSON发送而不是字符串
$.ajax({
url: '/1',
type: 'post',
dataType: 'json',
data: {name: "test"},
contentType: 'application/json',
success: function(data){
alert("success");
alert(data);
}
});
服务器上的
app.post('/1', function(req, res) {
var body = req.body;
console.log(body)
res.send(body)
});