【发布时间】:2014-02-08 21:30:17
【问题描述】:
我正在编写一个简单的库应用程序,以便为使用 AngularJS 的更大项目做好准备。在网上阅读了很多关于使用 $resource 与 RESTful API 交互的内容后,我认为它可能会提供一些节省时间和扩展优势来实现它,而不是为每个请求使用 $http。问题是,由于某种原因(我不是 CORS 方面的专家,并且请求正在跨域发送),当使用我的 Node.js 控制台显示的 $save 方法时:
OPTIONS /books 200 1ms - 161b
使用query() 方法可以正常工作 - 节点控制台显示:
GET /books 200 1ms - 228b
此时我已经被困了几个小时,尝试了下面的变体,但它总是最终成为$save 的 OPTIONS 请求而不是 POST(根据 Angular 文档应该是这样)方法。
AngularJS 网络应用
app.js
var libraryApp = angular.module('libraryApp', ['ngResource', 'ngRoute', 'libraryControllers']);
libraryApp.factory('$book', ['$resource', function ($resource) {
return $resource('http://mywebserver\\:1337/books/:bookId', { bookId: '@bookId' });
}]);
controllers.js
var libraryControllers = angular.module('libraryControllers', []);
libraryControllers.controller('BookCtrl', ['$scope', '$book', function($scope, $book) {
...
$scope.addBook = function () {
var b = new $book;
b.isbn = "TEST";
b.description = "TEST";
b.price = 9.99;
b.$save();
};
}]);
带有 Express REST API 的 Node.js
app.js
var express = require('express'),
books = require('./routes/books'),
http = require('http'),
path = require('path');
var app = express();
...
// enable cross-domain scripting
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", req.headers.origin);
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
// routing
app.get('/books', books.getAll);
app.get('/books/:isbn', books.get);
// This is what I want to fire with the $save method
app.post('/books', books.add);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
./routes/books.js
...
exports.add = function(req, res) {
console.log("POST request received...");
console.log(req.body.isbn);
};
尝试将此行放入我的配置函数delete $httpProvider.defaults.headers.common["X-Requested-With"];,但没有改变。
我不是 Angular/Node 专业人士,但现在我认为这与它是跨域有关,就像我说的,我不是 CORS 方面的专家。
提前致谢。
【问题讨论】:
标签: node.js angularjs express cors ngresource