如何从NODE JS中的POST检索数据

时间:2014-09-21 15:56:34

标签: javascript node.js angularjs localhost

这是我的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”访问。

2 个答案:

答案 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