2015-08-03 2 views
1

Мой веб-сервер находится на http://localhost:3000, но мой сервер API находится на http://localhost:3001. Так что вместо того, чтобы предварить все мои запросы, как так:

var root = 'http://localhost:3001'; 
$http.get(root+'/')... 

... как я могу установить http://localhost:3001 по умолчанию для всех исходящих $http запросов? Я пробовал смотреть на Default Transformations, но не мог этого понять.

Редактировать: прочитав документы чуть внимательнее, я менее уверен (но все еще не уверен), что у Углового есть способ справиться с этим. Кажется, что вы можете манипулировать заголовками и данными, но не URL.

Редактировать 2: Два ответчика рекомендуют использовать глобальные функции/переменные. Это работает, но приводит к ошибкам CORS.

ответ

1

В зависимости от Wheter ваших делать ваши запросы от одного JS-файла или через несколько вы можете либо

//Create 2 global variables first outside the function then just use the 
// var name when needed 
var web = "http://localhost:3001"; 
var api = "http://localhost:3000"; 

Или если вам нужно делать запросы через несколько js-файлов, вы можете создавать функции для возврата каждого var, а затем вызывать их, когда это необходимо. Просто запомните, что файл с functios должен быть загружен первым.

function web() { 
    return "http://localhost:3001"; 
} 

function api() { 
    return "http://localhost:3000"; 
} 

так, то это было бы

$http.get(api + '/')... 

или

$http.get(api() + '/')... 

Edit: Обновление для ваших дополнительных вопросов

запрос POST в настоящее время preflighted вашего браузера с запрос OPTIONS, и не будет отправлять реальный запрос сервер, если он не получит одобрения, что ожидается в COR behavhour и подробно описано в документах COR.

Существует несколько способов исправить это, но один распространенный способ, чтобы добавить заголовок к вашему запросу:

var url = 'http://localhost:3001/users', 
    user= { 'someKey': 'some value' }, 
    config = { 
     headers: { 
      'Content-Type': 'text/plain' 
     } 
    } 
}; 

$http.post(url,user,config); 
+0

@AdamZerner на стороне заметки, какие преимущества вы надеетесь получить, используя 2 сервера здесь? Я не думал, что 2 сервера будут намного дополнительной работой CORS, чем один сервер, но я никогда не пробовал себя. – javawocky

+0

Кто-то рекомендовал его мне как способ быть более эффективным. Мое понимание: пусть X = web и Y = API. Скажем, я обслуживаю X и Y с одного и того же сервера, но получаю много хитов API, поэтому мне нужно масштабировать Y. Учитывая настройку, каждый раз, когда я добавляю сервер, я добавляю X * и * Y, когда я нужен только Y.Разделение X и Y на разные серверы дает вам гибкость при масштабировании. Но вопрос, который мы задаем себе, - это «гибкость, достойная сложности», и мы оба, похоже, считаем, что ответ «нет». –

+0

@AdamZerner интересно, я никогда раньше не сталкивался с этим. Возможно, преимущества становятся очевидными только после того, как вы увеличиваете ужасную массу до такой степени, когда фактическая производительность аппаратного обеспечения сервера начинает влиять на разделение работы, что уменьшит нагрузку на сервер? – javawocky

1

Вы могли бы написать глобальную функцию, которая обрабатывает префиксы для вас, например,

function p(uri) { 
    return "http://localhost:3001" + uri; 
} 

... 

$http.get(p('/')); 
+0

Да. Это похоже на твердую опцию, если у Angular нет хорошего способа справиться с этим. –

+0

На самом деле это приводит к запросам, которые выглядят так: http: // localhost: 3000/$ http: // localhost: 3001/users': /. Соответствующее примечание: '$ http.post ('http: // localhost: 3001/users', user)' был успешно отправлен как запрос 'OPTIONS' и дал мне' 200', но не создал пользователя. –

+0

@AdamZerner вы можете показать полный код для того, как вы делаете запрос? – javawocky

Смежные вопросы