【问题标题】:Issue with POST in Angular JSAngular JS中的POST问题
【发布时间】:2015-03-15 15:47:56
【问题描述】:

我正在尝试使用 angular+ node j 将数据发布到我在码头中运行的 REST 服务。 代码如下:

var app = 

    angular.module("loginapp", []);



        app.controller("loginctrl", function($scope,$http) {
                app.config(['$httpProvider', function($httpProvider) {
                $httpProvider.defaults.useXDomain = true;
                delete $httpProvider.defaults.headers.common['X-Requested-With'];
                    }
                ]);
                app.config(['$sceDelegateProvider', function($sceDelegateProvider) {
                    $sceDelegateProvider.resourceUrlWhitelist(['self', 'http://localhost:9011/**']);
                     }]);

                        $scope.login = function(e){
                            console.log('clicked login...');
                            e.preventDefault();             
                            $http({
                                      url: "http://localhost:9011/test/dummy/doStuff1",
                                      method: "POST",
                                      data : {email: $scope.email, password: $scope.password},
                                      headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' },
                                      withCredentials: false,
                                      }).success(function (data, status, headers, config) {
                                            console.log('status',status);
                                            console.log('data',JSON.stringify(data));
                                            console.log('headers',headers);
                                    }); 

                        }

                });

但是,我在请求中传递的数据没有映射到 REST 服务中的方法参数,因此没有调用该方法。代码如下:

    @Path("/test/dummy")
public class DummyService {
    @POST
    @Consumes({MediaType.APPLICATION_FORM_URLENCODED})
    @Produces({ MediaType.APPLICATION_JSON})
    @Path("/doStuff1")
    public Response doStuff1(DummyParam param) {
        System.out.println("Hiiiiiiiiii : ");
        return Response.ok().build();
    }

如果没有 param 参数,该方法将被调用,但它不起作用。 服务器文件是:

var express = require("express");
var path    = require("path");
var bodyParser = require("body-parser");
var cor = require("cors");
var app     = express();



app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cor());
app.all("/*", function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST");
    if (req.method === 'OPTIONS') {
    res.statusCode = 204;
    return res.end();
  } else {
    return next();
  }
});


app.get('/',function(req,res) {
    res.sendFile(__dirname +'/test/test.html')
})
app.listen(3000);

console.log("在 3000 端口运行"); 谁能帮我解决这个问题?

谢谢

【问题讨论】:

  • 我之前也遇到过类似的问题,你在服务器端使用正文解析器吗?在 mozilla 开发者工具中检查你的方法的参数,如果你会看到你在那里传递的数据,那么它在服务器端一定是错误的。
  • 感谢您的回复。是的,我在节点服务器上使用正文解析器。我看到表单数据正确。但是状态代码显示:不支持的媒体类型。我在客户端使用了相同的媒体类型和服务器端,如果你在代码中注意到。你能告诉我我错过了什么吗?
  • 嗯,我对普通的 node.js 不太擅长,我在使用 expressJS 时找到了解决方案。当您使用 bodyParser 时,您的扩展很少,当我使用 bodyParser.json() 时,我的问题得到了解决

标签: angularjs rest jetty http-post


【解决方案1】:

如果您看到 from 数据正确出现,那么它必须正确设置 bodyParser,我遇到了同样的问题,并使用 json 文件的 bodyParser 扩展解决了它。在 Express.js 中看起来像这样。

 app.use(bodyParser.json());

我最后的猜测是,也许你也需要 cookie-parser

尝试在body-parser之后添加:

 app.use(bodyParser.urlencoded({extended: true}));
 app.use(bodyParser.json());
 app.use(cookieParser('SecretCode!'));

我仍然加深了我对 express/node 的了解,但如果不是,我建议你断开小部件上的 api,这样可能会有所帮助,这样更容易看出问题所在。

【讨论】:

  • 感谢您的回复。我已按照您的建议添加了 bodyParser,但它不起作用。
  • 如果你想要你可以通过 node.js 的设置文件,所以也许我会以某种方式提供帮助,我认为普通节点的情况与 express 相同,我的意思是顺序很重要,所以也许你有以错误的顺序初始化某些东西?
  • 感谢您的回复。我已使用节点 js 服务器文件更新了问题。请您检查并告诉我我缺少什么?
  • 感谢您的回复,但我仍然面临这个问题。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2015-04-02
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 2019-04-02
  • 2014-09-02
相关资源
最近更新 更多