2017-09-14 72 views
1

我正在使用快速Web框架并尝试从angularjs发出$ http请求。我将数据传递给客户端请求,但服务器因未知原因未收到请求。请帮忙。node.js express未收到请求

server.js

var express = require('express'); 
var app = express(); 
var http = require('http'); 
var server = http.createServer(app); 
var io = require('socket.io')(server); 

var path = require('path'); 
var fs = require('fs'); 

app.use(express.static(path.join(__dirname, 'public'))); 

app.post('/readTfile',function (req,res) { 
    console.log('i received a request'); 
    console.log(req.body); 
}); 

server.listen(3000); 

和角度HTML

<html> 
    <head> 
     <title>File tream 2</title> 
     <script type="text/javascript" src="javascripts/angular.js"></script>     
    </head> 

    <body> 
     <h2>File tream 2 AngularJS</h2> 
     <div ng-app = "mainApp">    
      <div id="readfile" ng-controller = "Ctrl1">     
       <div>{{myfiledata}}</div> </br></br> 
      </div> 
     </div>  
    </body> 
<script> 
var mainApp = angular.module("mainApp",[]) 

mainApp.controller('Ctrl1', function ($scope, $http) { 
     var filename = 'D:\\myapp\\public\\test.txt';  
     var obj = {"filename" : filename}; 
     $scope.myfiledata = 'result'; 
     $http({ 
       url: '/readTfile', 
       method: "POST", 
       data: JSON.stringify(obj), 
       //timeout: canceller.promise, 
       headers: {'Content-Type': 'application/json','charset' : 'utf-8'} 
       }).success(function(result) { 
       console.log(result); 
       $scope.myfiledata = 'result';      
       }).error(function(data, status) { 
       console.log(data); 
       }); 
});    
</script> 
</html> 

在控制台我得到未定义req.body

我收到一个请求

不确定

请帮我解决这个问题。

回答

7

您将需要中间件从传入流中读取POST请求的正文,并将其从JSON解析为Javascript对象。它不会仅自动结束于req.body。一个简单的JSON体的通常中间件将使用body-parser middleware

const bodyParser = require('body-parser'); 

// other stuff here 

// read and parse application/json 
app.use(bodyParser.json()); 

app.post('/readTfile',function (req,res) { 
    console.log('i received a request'); 
    console.log(req.body); 
}); 

而且,对于这种中间件工作,并自动识别您发送JSON,你将不得不确保帖子已设置正确的内容类型。

+0

非常感谢。我添加了这个中间件,它工作。我在嘲笑我自己想念这个。再次感谢。 – sand

+0

@sand,如果它解决了您的问题,请接受答案 – lifeisfoo

+0

我正在尝试,但它是要求等待4分钟。 – sand