我希望通过提交表单向位于不同域的服务器发送HTTP POST请求(使用Node.js在服务器脚本中启用了CORS)。
以下是包含所有Angular配置的脚本:
var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(function($routeProvider, $locationProvider, $httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
$routeProvider
.when('/', {
controller: 'RouteCtrl',
templateUrl: 'views/home_views.html'
})
.when('/login', {
controller: 'RouteCtrl',
templateUrl: 'views/login_views.html'
})
.when('/register', {
controller: 'RouteCtrl',
templateUrl: 'views/register_views.html'
})
});
myApp.controller("UserController", function($scope, $http) {
$scope.formData = {};
$scope.clickMe = function() {
console.log("Yay");
$http({
method: 'POST',
url: 'http://localhost:8183/user/register',
data: $.param($scope.formData),
})
.success(function(data) {
console.log(data);
if(!data.success) {
console.log("error here");
} else {
console.log("error there");
}
});
}
}); ...
我正在使用AngularJS 1.2.22,根据这个教程(启用CORS),为了启用CORS,需要在配置中手动启用CORS。但它仍然无效。以下是我从浏览器控制台获得的内容。
跨源请求被阻止:同源策略禁止读取远程资源 http://localhost:8183/user/register。可以通过将资源移动到相同的域或启用CORS来解决此问题。
我对AngularJS非常陌生,希望能得到任何帮助以指出我可能犯的错误...谢谢!
---- 编辑:添加server.js脚本 ----
var express = require('express'),
app = express(),
bodyParser = require('body-parser'),
expressValidator = require('express-validator'),
mysql = require('mysql'),
crypto = require('crypto'),
cors = require('cors'),
uuid = require('node-uuid');
var connectionpool = mysql.createPool({
connectionLimit: 1000,
host: 'localhost',
user: 'root',
password: '',
database: 'cloudvm'
});
app.listen(8183);
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.use(expressValidator());
app.use(cors());
var user_router = express.Router();
var user_list = user_router.route('/list');
var user_register = user_router.route('/register');
var user_login = user_router.route('/login');
app.use('/user', user_router);
user_register.post(function(req, res, next) {
var errors = req.validationErrors();
if (errors) {
res.status(200);
res.send(errors);
console.log(errors);
return;
}
var data = {
name_user: req.body.name,
email_user: req.body.email,
password_user: req.body.password,
no_telp_user: req.body.no_telp,
company_name_user: req.body.company_name,
address_user: req.body.address,
name_cc_user: req.body.name_cc,
address_cc_user: req.body.address_cc,
no_cc_user: req.body.no_cc,
no_vcv_user: req.body.no_vcv,
expire_month_cc_user: req.body.expire_month,
expire_year_cc_user: req.body.expire_year
};
connectionpool.getConnection(function(err, connection) {
if (err) {
console.error('CONNECTION ERROR:', err);
res.statusCode = 503;
res.send({
result: 'error',
err: err.code
});
} else {
var sql = 'INSERT INTO user SET ?';
console.log(sql)
connection.query(sql, data, function(err, rows, fields) {
if (err) {
console.error(err);
res.statuscode = 500;
res.send({
result: 'error',
err: err.code
});
}
res.send([{
msg: "registration succeed"
}]);
connection.release();
});
}
});
});
解决方案
感谢您的回答,但我已经成功在我的服务器脚本(运行在Node上)上启用了CORS,然后我尝试使用以下方法:
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
当我的客户端脚本调用HTTP请求时,最终让我能够从服务器获取响应而没有CORS问题!因此,我认为这可能是头部问题..感谢您的友善回复!希望这可以帮助未来遇到此问题的任何人!
var cors = require('cors')
和var app = express()
,然后调用app.use(cors())
来启用它,这样不对吗? - prameshvari