로 컬 Node. js 서버 를 api 서버 로 하 는 해결 방법

5399 단어
react - native 튜 토리 얼 을 볼 때 핸드폰 에서 디 버 깅 하려 면 api 서버 가 필요 합 니 다. 그러나 Node. js 자체 가 서버 이기 때문에 apache 가 없 으 면 이 문 제 를 어떻게 해결 할 수 있 습 니까? apache 와 nginx 로 도 해결 할 수 있 습 니 다. 그러나 좀 복잡 합 니 다. 우 리 는 node 기 존의 모듈 로 이 문 제 를 해결 합 니 다. 개념: 컴퓨터 의 주 소 는 두 개 이 고 하 나 는 로 컬 링 주소 입 니 다.127.0.0.1 또는 localhost 입 니 다. 이 주 소 는 본 컴퓨터 이외 에는 접근 할 수 없습니다. 또 하나의 주 소 는 공유 기 나 교환기 가 분배 한 ip 주소 입 니 다. 이 주 소 는 다른 컴퓨터 에서 접근 할 수 있 습 니 다.node. js 에서 ip 주 소 를 로 컬 링 주소 로 바 꿔 야 접근 할 수 있 습 니 다.원 리 는 이렇다.
 //       
var express = require('express');

var app = express();

// set up handlebars view engine
var handlebars = require('express3-handlebars')
    .create({ defaultLayout:'main' });
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');

app.set('port', process.env.PORT || 3000);

app.use(express.static(__dirname + '/public'));

var fortuneCookies = [
    "Conquer your fears or they will conquer you.",
    "Rivers need springs.",
    "Do not fear what you don't know.",
    "You will have a pleasant surprise.",
    "Whenever possible, keep it simple.",
];

app.get('/', function(req, res) {
    res.render('home');
});
app.get('/about', function(req,res){
    var randomFortune = 
        fortuneCookies[Math.floor(Math.random() * fortuneCookies.length)];
    res.render('about', { fortune: randomFortune });
});

// 404 catch-all handler (middleware)
app.use(function(req, res, next){
    res.status(404);
    res.render('404');
});

// 500 error handler (middleware)
app.use(function(err, req, res, next){
    console.error(err.stack);
    res.status(500);
    res.render('500');
});

app.listen(app.get('port'), function(){
  console.log( 'Express started on http://localhost:' + 
    app.get('port') + '; press Ctrl-C to terminate.' );
});



위의 이 코드 는 127.0.0.1: 3000 포트 에서 로 컬 서버 를 시작 하지만 핸드폰 쪽 에 서 는 접근 할 수 없습니다.
우 리 는 이 문 제 를 해결 하기 위해 다른 node. js 서버 를 다시 시작 합 니 다.
//proxy.js
   var http = require('http'), 
         httpProxy = require('http-proxy');  //      
  
//        Proxy Server     
var proxy = httpProxy.createProxyServer({});  
  
//       
proxy.on('error', function (err, req, res) {  
  res.writeHead(500, {  
    'Content-Type': 'text/plain'  
  });  
  res.end('Something went wrong. And we are reporting a custom error message.');  
});  
  
//        HTTP 80       ,      Node    HTTP       。  
//       ,   proxy.web(req, res config)           
var server = require('http').createServer(function(req, res) {  
  //                 
  var host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;  
  console.log("client ip:" + ip + ", host:" + host);  
    
  switch(host){  //        ip  ,       
//127.0.0.1:3000  
    case '192.168.0.101:8080':    //      
   //     window  ipconfig  ,mac/linux ifconfig  
   
    case 'bbs.aaaa.com':  
        proxy.web(req, res, { target: 'http://127.0.0.1:3000' });  //      
    break;  
    
    default:  
        res.writeHead(200, {  
            'Content-Type': 'text/plain'  
        });  
        res.end('Welcome to my server!');  
  }  
});  
  
console.log("listening on port 8080")  
server.listen(8080); 

node proxy. js 이후 proxy 서버 를 시 작 했 습 니 다. 컴퓨터 의 ip 주 소 를 통 해 127.0.0.1 api 경로 에 접근 할 수 있 습 니 다.
nginx 를 사용 하 는 것 도 요구 에 도달 할 수 있 습 니 다. mac 에서 homebrew 패키지 관 리 를 사용 하 는 것 이 상당히 편리 합 니 다. bash 에서 brew install nginx 를 설치 하여 brew services start nginx 를 시작 합 니 다. 아 톰 편집기 bash 를 설치 하면 직접 아 톰 / usr / local / etc / nginx / nginx. conf 에서 설정 파일 의 본분 을 열 고 수정 합 니 다.
다음은 nginx. conf 설정 파일 입 니 다.
  //nginx.conf

 #        。          nginx.conf   


events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';



    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;



    server {
        listen 8080;  #  80880  
        server_name www.penguu.com 192.168.1.100;  #           。
        # Mac      ifconfig   。        192.168.1.100
        #          192.168.1.100:8080
        #   23         80  ,         80  。   mac      。 #    8080  
        # address_book  service           
        # view/service.js->host,    192.168.1.100:8080

        #access_log /var/log/nginx/test.log;
        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host  $http_host;
            proxy_set_header X-Nginx-Proxy true;
            proxy_set_header Connection "";
            proxy_pass      http://127.0.0.1:3000;  # address_book  server  ,    node.js    ip  
            #node.js    127.0.0.1 ,port:3000  app.js    。    。

        }

    }

    }


 

좋은 웹페이지 즐겨찾기