【发布时间】: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