我正在尝试使用restangular设置单个帖子请求的标头,但请求是以纯文本而不是json发送的。 我已阅读文档here以及similar question。 我遵循了规定的方法但无济于事。
在服务器端使用Express 4.x并使用名为Moongoose的ORM与Mongodb通信。
服务器端:server.js使用express.js 4.0
'use strict';
var express = require('express'),
morgan = require('morgan'),
port =process.env.PORT || 3000,
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
app = express();
app.use(morgan('dev'));
app.use(bodyParser());
app.use(methodOverride());
app.use(express.static(__dirname+"/app"));
require('./config/models');
require('./config/user_ctrl');
require('./config/comt_ctrl');
require('./config/routes')(app);
app.listen(port);
console.log('Magic happens on port: '+port);
//Server side: routes.js
var pips = require('./user_ctrl');
module.exports = function(app){
app.get('/api/pipplez',pips.getPipplez); //Gets all users in collection
app.post('/api/pipplez/wan',pips.getPipplezById); //Gets the specified user
app.all('/api/*', function(req, res) {
res.send(404);
});
app.get('/*', function(req, res){
res.send('index.html');
});
};
在客户端,我有这个。
客户端:配置后的app.js
.factory('userServ',function(Restangular){
var ol = Restangular.withConfig(function(conf){
conf.setBaseUrl('/api/')
});
var an = Restangular.withConfig(function(conf){
conf.setBaseUrl('/api/users/')
});
return{
oldem: ol.one('users').getList(),
wandem: an.one('one')
}
});
客户端:userCtr.js
'use strict';
ting.controller('userCtrl', function($scope, userServ){
$scope.pip = {
name: ''
};
$scope.getOlPips = function(){
userServ.oldem.then(function(rez){
if(rez!=='null'){
$scope.dem = rez;
console.log($scope.dem);
}
}, function(err){
console.log('Error!!!\n', err );
})
};
$scope.getWanPip = function(pip){
//console.log(pip);
RestServ.wandem.post(pip, {}, {'Content-Type':'application/json'}).then(function(res){
console.log(res)
}, function(err){
console.log('Error!!!\n', err);
})
};
$scope.getOlUzas();
});
部分html
<form>
<input ng-model='pip.unm' maxlength= '20' placeholder='Search for user...'>
<button class="btn btn-primary" ng-click = 'getWanPip(pip)'>Find</button>
</form>
我使用postman对后端进行了广泛测试。后端正在运作。应用程序能够从数据库中获取所有记录,但是当我发出post请求时,我得到404,因为请求的格式是以纯文本而不是json的形式发送的。我怎样才能让它发挥作用?
答案 0 :(得分:0)
在网上摸索之后,我发现默认情况下,restangular以json格式将表单数据发送到服务器。我被Chrome的开发人员工具误导了。为了传播http请求,我建议fiddler 如果想要格式化作为来自表单的请求发送的restangular中的标题,您可以执行以下操作:
//From the previous example....
//Assuming restangular did not not send form data in json format by default
$scope.getWanPip = function(pip){
RestServ.wandem.post(pip, {},{}, {'Content-Type':'application/json'}).then(function(res){
console.log(res)
}, function(err){
console.log('Error!!!\n', err);
})
注意两个空花括号而不是一个... 我仍然无法执行帖子,但这是因为数据是作为网址的一部分而不是单独发送的。这需要另一个问题......
答案 1 :(得分:0)
不要传递两个空对象,尝试传递:
.post(pip, undefined, undefined, {'Content-Type':'application/json'})
甚至.customPOST()
代替.post()
。
答案 2 :(得分:0)
你可以这样做:
const headers = { headers: { 'Content-Type':'application/json' } };
RestServ.wandem.withHttpConfig(headers).post(pip)