2016-11-09 62 views
0

req.body始终为空。我不确定我做错了什么?我尝试添加内容类型标头为json,但是也没有做任何事情。有人能带我正确的方向吗?谢谢通过POST传递角度变量以表达后端

编辑︰只是为了澄清的目的,我的角前端命中后端功能,但req.body是空的。如果我正确地理解了所有内容,如果我正在使用“body-parser”库,它应该通过“req.body”后传递。我只是没有看到,但我不知道为什么。编辑2:我有我的app.js身体分析器代码,但在index.js文件中的后端路由,这是否有任何关系呢?

EDIT3:app.js http://pastebin.com/9vNgf0Nd index.js http://pastebin.com/icLa3e2X

ANGULAR FRONTEND

service.registerAccount = function(account) { 
     console.log(account); //account = { userName: 'test', password: 'hello' } 
     return $http({ 
      method: 'POST', 
      url: '/register', 
      data: { account: account }, 
      headers: {'Content-Type': 'application/json'} 
     }); 
    } 

BACKEND(app.js)

var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

BACKEND(index.js)

var express = require('express'); 
var router = express.Router();  

router.post('/register', function(req, res) { 
    console.log(req.body); 
}; 
+1

您是否试过直接调用REST服务?使用RESTClient,邮差或类似的东西。 –

+0

@CarlosLaspina不,我没有。我想我可以看看现在这样做.. – user1189352

+0

这将有助于知道在哪一层出现问题 –

回答

2

请删除此行

app.use(bodyParser.urlencoded({ extended: true })) 

此外,

app.use(bodyParser.json()); 

面前app.use('/', routes);

被称为并确保内容类型添加:应用程序/ JSON的请求头

+0

刚刚尝试过,它表示身体分析器已被弃用,但它仍然运行,但不幸的是我得到了相同的结果。 ty用于尝试 – user1189352

+0

与'app.use(bodyParser.urlencoded({extended:true}))''删除? –

+0

是的,我完全删除了该行 – user1189352

1

如果添加内容类型,会发生什么情况?

service.registerAccount = function(account) { 
     console.log(account); //account = { userName: 'test', password: 'hello' } 
     return $http({ 
      method: 'POST', 
      url: '/register', 
      data: { account: account }, 
      headers: { 
       'Content-Type': 'application/json' 
      } 
     }); 
    } 
+0

不幸的是,同样的事情! = T – user1189352

0

UI代码没有错。不知道router是什么,所以你可以试试这个或发布路由器的代码。

试试这个(这对我的作品),或者你也可以使用你的路由器:

app.post('/register', function (req, res) { 
    console.log(req.body); 
    res.send('welcome, ' + req.body.account.username) 

}); 

你缺少:如果你想用户路由器

var app = express(); 
app.use(router); 

指的是下面的例子:

带有完整代码的更新:

var express = require('express'); 
var router = express.Router();  
var app = express(); 
app.use(router); 
router.post('/register', function(req, res) { 
    console.log(req.body); 
}; 
app.route('/register') 
    .post(function (req, res) { 
    console.log(req.body); 
    res.send('welcome, ' + req.body.account.username) 
    }) 
+0

我是否将'app.use(router)'添加到我的app.js中?编辑:等待,不'有道理,因为我在我的index.js中定义var router = express.Router()。所以我应该通过说'express.use(路由器)'来定义它吗? – user1189352

+0

添加到您的index.js – bhantol

+0

它说'应用程序未定义',如果我尝试express.use它说'express.use不是函数'。我是否必须在我的index.js中再次定义'var app = express()'? – user1189352

0

试试这个

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.post('/register', function(req, res) { 
    console.log(req.body); 
}); 

var server = app.listen(8081, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port) 
}); 

,然后从提示符下执行以下:

$ curl localhost:8081/register -v --data "{\"name\":\"test\",\"password\":\"hello\"}" --header "Content-Type: application/json" 

这对我的作品!

+0

hm同样的事情unfortunatley adlfkjadslkfjasdf – user1189352