Я собираюсь написать простое библиотечное приложение, чтобы подготовиться к более крупному проекту с помощью AngularJS. Прочитав много онлайн об использовании $resource
для взаимодействия с RESTful API, я решил, что он, вероятно, предложит некоторые преимущества экономии времени и масштабирования для его реализации вместо использования $http
для каждого запроса. Проблема заключается в том, что по какой-то причине (я не эксперт по CORS и запрос отправляется в кросс-домен) при использовании метода $save
моя консоль Node.js показывает:
OPTIONS /books 200 1ms - 161b
Использование метода query()
отлично работает - консоль Node показывает:
GET /books 200 1ms - 228b
Я застрял в течение нескольких часов на этом этапе, пытаясь изменить варианты ниже, но он всегда заканчивается тем, что это запрос OPTIONS вместо POST (что должно быть в соответствии с документацией Angular) для $save
.
Веб-приложение 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();
};
}]);
Node.js с API Express REST
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'));
});
./маршруты/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 pro, но сейчас я думаю, что это связано с тем, что это кросс-домен, и, как я уже сказал, я не эксперт в CORS.
Спасибо заранее.