这是我的HTML表单
<form class="navbar-form navbar-right" ng-submit="loginuser()">
<input type="email" ng-model="user.username" placeholder="Email" class="form-control" required>
<input type="password" ng-model="user.password" placeholder="Password" class="form-control" required>
<button class="btn btn-success" type="submit">Login</button>
</form>
我的app.js是
function navbarformcontroller($scope,$http){
$scope.user = {};
$scope.loginuser = function(){
console.log('entered');
$http({
method : 'POST' ,
url : 'http://localhost:3000/login',
data : $scope.user
})
.success(function(data){
alert(data);
})
.error(function(data, status){
alert(data + " " + status + 'x');
})
};
}
在我的服务器端是节点js是
router.get('/', function(req, res) {
req.render('login',{username : req.username, password : req.password});
res.send('success');
log(username + " " + password);
});
并且客户端控制台中的错误详细信息为
XMLHttpRequest无法加载
http://localhost:3000/login
。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:63342
”访问。
答案 0 :(得分:0)
您的浏览器限制访问其他域。您正在使用localhost但不同的端口,这就是您的域名变得与众不同的原因。
此处的最佳解决方案是运行服务器并使用相同的端口请求访问。由于您在端口63342上运行nodejs服务器,因此您需要使用域
访问/登录页面http://localhost:63342
更好的是,由于域名相同,您可以避免添加域并将请求作为
function navbarformcontroller($scope,$http){
$scope.user = {};
$scope.loginuser = function(){
console.log('entered');
$http({
method : 'POST' ,
url : '/login',
data : $scope.user
})
.success(function(data){
alert(data);
})
.error(function(data, status){
alert(data + " " + status + 'x');
})
};
}
答案 1 :(得分:0)
这里有一些问题:
好像你可能没有使用正文解析中间件。如果你不处理文件,你可以在npm上使用body-parser模块。如果您需要multipart/form-data
(文件)支持,可以在body-parser
自述文件中找到可以处理这些类型请求的模块的链接。
您正尝试同时向客户端呈现模板和字符串“success”。此外,对于模板呈现,它是res.render()
而非req.render()
。
您正在尝试跨源请求。虽然主机名可能相同,但端口不同,也构成了跨源请求。因此,在Express中处理CORS的最简单方法之一是在npm上使用cors等中间件。如果您需要根据请求发送Cookie,自定义标头等,则需要在withCredentials: true
配置对象中设置$http
。