Javascript Restangular未在post上设置标题

Javascript Restangular未在post上设置标题,javascript,json,angularjs,rest,restangular,Javascript,Json,Angularjs,Rest,Restangular,我试图使用restanglar为单个post请求设置头,但是请求是以纯文本而不是json的形式发送的。 我已经阅读了文档以及一份报告。 我按照规定的方法做了,但没有用 在服务器端,我使用Express 4.x,并使用名为Moongoose的ORM与Mongodb通信 服务器端:使用express.js 4.0的Server.js 'use strict'; var express = require('express'), morgan = require('morgan'),

我试图使用restanglar为单个post请求设置头,但是请求是以纯文本而不是json的形式发送的。 我已经阅读了文档以及一份报告。 我按照规定的方法做了,但没有用

在服务器端,我使用Express 4.x,并使用名为Moongoose的ORM与Mongodb通信

服务器端:使用express.js 4.0的Server.js

'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>

发现

我已经广泛测试了后端使用。后端正在运行。应用程序能够从数据库中获取所有记录,但是当我发出post请求时,我会得到一个404,因为请求的格式是以纯文本而不是json的形式发送的。我怎样才能让它工作呢?

在网络上摸索之后,我发现restanglar默认以json格式向服务器发送表单数据。我被chrome的开发者工具误导了。为了分离http请求,我建议 如果要在Restanglar中格式化作为表单请求发送的标头,可以执行以下操作:

//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);
        })
请注意两个空的花括号,而不是一个。。。
我仍然无法执行post,但这是因为数据是作为url的一部分发送的,而不是单独发送的。这需要另一个问题…

不要传递两个空对象,请尝试传递:

.post(pip, undefined, undefined, {'Content-Type':'application/json'})
甚至是
.customPOST()
而不是
.post()

,您可以执行以下操作:

const headers = { headers: { 'Content-Type':'application/json' } };

RestServ.wandem.withHttpConfig(headers).post(pip)