2016-03-03 10 views
2

Спасибо за так много быстрого ответа.
Я использовал NodeJS (v4.3.2) и ExpressJs (v4.x) для создания веб-сайта.
Я использовал много AJAX, и все URL-адреса AJAX указывают на один статический IP-адрес (сам сервер AWS).
Поскольку я буду развертывать на нескольких серверах, я не хочу менять URL-адрес AJAX отдельно. Моя идея в том, что я запускаю командную строку «node bin/www», могу ли я изменить ее на «node bin/www 50.50.50.50 (мой адрес AWS)», и я могу установить для всех URL AJAX правильный IP-адрес?
Возможно ли это или другое альтернативное выгорание?
БлагодаряКак установить глобальные переменные командой

+0

Это проблема CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS. Вы должны установить заголовки ответа сервера, чтобы разрешить клиенту общаться через Ajax – cl3m

+0

. См. [«Если вопросы включают« теги »в их названиях?»] (Http: //meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), где консенсус «нет, они не должны»! –

+0

Я бы предложил удалить 'http: //127.0.0.1: 3000' из всех ваших запросов запроса Ajax. Поэтому измените 'http: //127.0.0.1: 3000/blablabla' на'/blablabla'. Это сделает его относительно домена и порта, так что, если вы обращаетесь к веб-сайту с вашего собственного локального сервера, он будет запрашивать 'http: //127.0.0.1: 3000/blablabla', но если вы получите доступ к нему из какого-либо имени домена или другой IP, он будет использовать это (IE. http://50.50.50.50/blablabla) – Paulpro

ответ

2

Ваш вопрос связан с CORS: в принципе, вы не можете получить доступ к домену http://www.example1.com из http://www.example2.com через Ajax если http://www.example1.com прямо не позволяет ему в ответ.

Это функция безопасности в большинстве современных браузеров. Вы не столкнетесь с этой проблемой, используя командную строку, такую ​​как curl или расширение xrome Postman.

Чтобы исправить это, убедитесь, что домен запрашивают данные (http://www.example2.com) допускается в Access-Control-Allow-Origin заголовке в ответ вашего сервера, а также HTTP глагола (GET, POST, PUT ... или * для каждых методов HTTP).

Это все сводится к тому, добавить две следующие заголовки ответа http://www.example1.com сервера:

Access-Control-Allow-Origin: http://www.example2.com 
Access-Control-Allow-Methods: * 

Редактировать

После @ комментарий Paulpro, вы должны перебазироваться все URLs так, что они достигают IP-адрес вашего сервера вместо вашего сервера localhost.

+0

Спасибо за быстрый ответ! Но у меня есть один вопрос: вы упомянули «Это функция безопасности» в большинстве современных браузеров ». Если я настроюсь так, как вы говорите, это вызовет проблему с веб-безопасностью? Или почему это функция безопасности? –

+0

Эта функция является механизмом безопасности для изоляции потенциально вредоносных документов. Вы можете узнать больше о политике одинакового происхождения здесь: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy. Если вы хотите защитить свой API, см. Редактирование, вы должны указать только домены, вызывающие ваш API, а не '*' – cl3m

+1

Это кажется совершенно неправильным решением. Если запросы отправятся на «127.0.0.1: 3000», веб-сайт будет работать только для пользователей, на которых запущена локальная копия на своем собственном компьютере (IE будет работать для OP, но никто другой). Он не нуждается в CORS, просто нужно изменить все запросы ajax как относительные для домена (или использовать файл конфигурации и сделать домен для них настраиваемым). – Paulpro

0

исправляю эту проблему.
Во-первых, в bin/www
добавьте этот код, чтобы получить URL-адрес для командной строки и сохранить в json-файл.

function setUpURL(){ 
    var myURL = process.argv[2]; 
    console.log('myURL: ', myURL); 
    var outputFilename = 'public/myURL.json'; 
    var myData = { 
    port:myURL 
    } 

    fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) { 
     if(err) { 
     console.log(err); 
     } else { 
     console.log("JSON saved to " + outputFilename); 
     } 
    }); 
}; 

Затем в каждом из JS, содержащих Аякса добавить эти символы в главе JS-файла (это необходимо загрузить до того AJAX)

var myURL; 
$.getJSON("myURL.json", function(json) { 
    myURL = json.port.toString(); 
    console.log(myURL); 
}); 

новый формат АЯКС

$.ajax({ 
    type: "POST", 
    url: myURL + "/forgetPwd", 
    data: sendData, 
    success: function(data){ 
      window.location.replace(myURL); 
     }, 
    error: function(data){ 
     } 
}); 

Наконец, вам может работать сервер

узел bin/www your_aws_ip

Теперь это работает для меня. Надеюсь, они помогут вам, ребята.
Кстати, вы должны быть осторожны относительно пути myURL.json.

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