使用$ http.post(angular)和bodyparser.text()发送字符串请求时,请求体返回为对象?

时间:2016-10-28 05:38:28

标签: javascript angularjs http express post

当我发送一个字符串值作为请求时,req.body值是一个对象。我正在使用:

我有一个工厂cust1_service.postQuery:

.factory('cust1_service', function($http){
    return {
        postQuery : function(request){
            console.log('cust1 req : ' + request);
            console.log('typeof request : ' + typeof request);
            var config = {'Content-Type' : 'text/plain'};
            return $http.post('/cust1', request);
        }
    }

以下是我在控制器中调用工厂的方法:

cust1_service.postQuery(req_string).success(handleSuccess);

我也在路线

之前使用bodyParser.text()
var express = require('express'),   
config = require('./config/config'),    
bodyParser = require('body-parser'),    
api = require('./app/routes/api.js');               

var app = express();

app.use(bodyParser.text({   
    type: "text/*"               
}));                             

app.use(express.static(__dirname + '/public'));     //Serve static assets

require('./app/routes/api.js')(app, db);

app.listen(config.port, function() {    
    console.log('Listening on ' + config.port); 
})

所以....当我到达我的路由api

app.route('/cust1')
    .post(function(req,res){
            console.log('this is req.body : ' + req.body);

req.body是[object Object] ...我是否正确地将请求作为文本类型发送?我需要req.body作为字符串。

1 个答案:

答案 0 :(得分:1)

尝试“stringifyreq.body以确定它是否仍作为JSON对象传递。您也可以尝试记录控制台,如console.log('this is req.body : ', req.body, ' --- ');

您可以尝试的一个解决方案是完全删除BodyParser中间件的使用 - 这应该强制主体是文本。 所以你需要删除或注释掉这一行:

app.use(bodyParser.text({ type: "text/*"})) 

您可以查看密切相关的问题here.

我希望这会有所帮助;