Tengo un servidor real con API REST listas. Ahora estoy desarrollando una aplicación web angular2 y quiero consumir API REST reales en la fase de desarrollo de la aplicación web.

Estoy usando angular-cli.

Mi servidor no admite el acceso de origen cruzado, por lo que no puedo acceder directamente a la API REST del servidor.

Necesito alguna forma de poner un controlador de solicitud / respuesta para mi servidor de desarrollo de paquete web.

Puede ser una pregunta tonta ya que estoy probando el mundo de nodej por primera vez.

2
Anil8753 29 dic. 2016 a las 18:56
Necesita otro servidor que reenvíe a su servidor con la API REST si no puede configurar ese servidor para que admita CORS.
 – 
Günter Zöchbauer
29 dic. 2016 a las 19:09
Sí, es por eso que estoy hablando de una forma de poner un controlador de solicitud / respuesta simple (tipo de proxy para el servidor real) en el servidor de desarrollo webpack.
 – 
Anil8753
29 dic. 2016 a las 19:19

2 respuestas

Debe usar la biblioteca 'cors' para permitir el origen cruzado en su servidor

Enlace: https://www.npmjs.com/package/cors

$ npm i -S cors

Var cors = require ('cors');

Si usa express, por ejemplo, debe llamar a la función 'use' con cors:

App.use (cors ());

Yair

0
YairTawil 29 dic. 2016 a las 19:13
No puedo configurar el servidor, ya que es un servidor de terceros y solo accedo a API
 – 
Anil8753
29 dic. 2016 a las 19:20

Basado en sugerencias, escribí un controlador http proxy con CORS habilitado. Esto simplemente tomará la solicitud de la aplicación y la delegará en el servidor real. La respuesta del servidor real se enviará de vuelta a la aplicación web solicitante. Desde la aplicación web, envíe las solicitudes simplemente cambiando la URL base del servidor. P.ej. en lugar de http://your_real_server.com/dashboard utilice http: // localhost: 7000 / dashboard

var http = require('http');
var url = require('url');
var querystring = require('querystring');

///////////////////////////////////////////////////////////////
var remoteUrl = 'your_remote_server_base_url_without_http.com';
///////////////////////////////////////////////////////////////

http.createServer(function (request, response) {

    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With");

    pathName = url.parse(request.url).pathname;
    query = url.parse(request.url).query;

    if (query != null) {
        pathName += '?' + query;
    }

    console.log('Remote URL : ' + remoteUrl + pathName);

    var options = {
        host: remoteUrl,
        path: pathName,
        method: request.method
    };

    http.request(options, function (res) {
        res.setEncoding('utf8');
        var str = '';

        res.on('data', function (chunk) {
            str += chunk;
        });

        res.on('end', function () {
            response.writeHead(200, { 'Content-type': 'text/json' });
            response.write(str);
            response.end();
        });
    }).end();


}).listen(7000, function () {
    console.log('\n=============================================================');
    console.log('================== Running at port 7000 ======================');
    console.log('=============================================================\n');
});
0
Anil8753 30 dic. 2016 a las 18:58