Node.js Express无法获取发布数据

时间:2014-04-24 17:45:11

标签: node.js express

当我发布到/ insertUser和schema.saveUser(req)时,它找不到正确的数据。我正在使用节点检查器,它无法找到我的帖子数据。我也尝试了req.body,它什么都没发现。我发送了一个json

var express = require('express');
var bodyParser = require('body-parser');
var schema = require("./schemas");
var app = express();

app.get('/hello.txt', function(req, res){
  res.send('Hello World2');
});

app.post('/insertUser', function(req, res){
console.log("Request handler 'insertUser' was called.");
//console.log(req.body);

schema.saveUser(req);

response.writeHead(200, {"Content-Type": "text/plain"});
res.send("You've sent the text: " + req);
response.write("The following data has been saved to the database: " + jsonString);
res.end();
});

var server = app.listen(8888, function() {
    console.log('Listening on port %d', server.address().port);
});



function saveUser(postData){
  var jsonObj = JSON.parse(postData);

  var newUser = new User({
    name: jsonObj.name,
     email: jsonObj.email,
    photoURL: jsonObj.photourl,
    groups: jsonObj.groups
  });

  newUser.save(function(err, newUser) {
    if (err) return console.error(err);
    console.dir(newUser);
  });
}

编辑:

    SyntaxError: Unexpected token o

     at Object.parse (native)
     at Object.saveUser (schemas.js:42:22)
    at Object.handle (server.js:25:9)
    at next_layer (route.js:103:13)
     at Route.dispatch (route.js:107:5)
     at c (index.js:195:24)
    at Function.proto.process_params (index.js:251:12)
     at next (index.js:189:19)
     at next (index.js:166:38)
    at Layer.urlencodedParser [as handle] (index.js:70:44)

2 个答案:

答案 0 :(得分:3)

在客户端

Cannot GET /insertUser表示这是一条GET路线,浏览器在点击链接或输入页面网址时会调用该路线。

但是您指定了app.post('/insertUser'...,这意味着只有在使用POST方法时才会调用该路由(例如,在提交表单时使用,从不点击链接时使用)

如果这是表单的结果,请不要忘记指定方法(<form method="post">)。对于ajax调用也一样。

如果您想在开发模式下测试,可以使用chrome上的Postman轻松调用POST路由。如果你没有镀铬使用卷曲。

返回端

快递身体解析器不包含在Express 4.0中,因此您需要安装它然后使用它:

var express = require('express');
var bodyParser = require('body-parser');
var schema = require("./schemas");
var app = express();

app.use(bodyParser());

app.get('/hello.txt', function(req, res){
  res.send('Hello World2');
});

然后您可以使用req.body

答案 1 :(得分:2)

我认为在Express 4中你需要使用router对象而不是app来定义路由......这样的事情:

var express = require('express');
var bodyParser = require('body-parser');
var schema = require("./schemas");
var app = express();

var router = express.Router();

router.get('/hello.txt', function(req, res){
  res.send('Hello World2');
});

router.post('/insertUser', function(req, res){
console.log("Request handler 'insertUser' was called.");
});
...