我正在尝试使用angular + node j将数据发布到我在jetty中运行的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);
});
}
});
然而,我在Request中传递的数据没有被映射到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运行”); 任何人都可以帮我解决这个问题吗?
谢谢
答案 0 :(得分:0)
如果你看到来自数据的正确,那么它必须是正确设置bodyParser的东西,我有同样的问题并用json文件的bodyParser扩展解决了它。在Express.js中它看起来像这样。
app.use(bodyParser.json());
我的最后一个猜测是,也许你需要cookie解析器
尝试在body-parser之后添加它:
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(cookieParser('SecretCode!'));
我仍然加深了对快递/节点的了解,但是如果不是我建议你在小部件上断开api,这样会更容易看出错误。