• nodeJS搭建一个简单的(代理)web服务器


    前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理。最近在用vuejs,发现webpack-dev-server的代理简单好用。于是仿照写了一个简单的web服务器,用于非webpack的项目。

     1 const request = require('request');
     2 const express = require('express');
     3 const path = require('path');
     4 
     5 const app = express();
     6 
     7 const proxyTable = {
     8   '/wcf': {
     9     target: 'http://localhost/wcf' 
    10   }
    11 };
    12 
    13 app.use(function(req, res,next) {
    14   const url = req.url;
    15   if (req.method == 'OPTIONS') {
    16       console.log('options_url: ', url);
    17       
    18       // res.header("Access-Control-Allow-Origin", req.headers.origin || '*');
    19       // res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
    20       // res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    21       
    22       // res.header("Access-Control-Allow-Credentials", true);
    23 
    24       res.status(200).send('OK');
    25       return;
    26   } 
    27 
    28   // console.log('req_url: ', url);
    29   next();
    30 });
    31 
    32 
    33 app.use(express.static(path.join(__dirname, 'static')));
    34 
    35 app.use('/', function(req, res) {
    36   const url = req.url;
    37   const proxy = Object.keys(proxyTable);
    38   let not_found = true; 
    39   for (let index = 0; index < proxy.length; index++) {
    40     const k = proxy[index];
    41     const i = url.indexOf(k);
    42     if (i >= 0) {     
    43       not_found = false;
    44       const element = proxyTable[k];
    45       const newUrl = element.target + url.slice(i+k.length);
    46       req.pipe(request({url: newUrl, timeout: 60000},(err)=>{
    47         if(err){
    48           console.log('error_url: ', err.code,url);
    49           res.status(500).send('');
    50         }     
    51       })).pipe(res);
    52       break;
    53     } 
    54   }
    55   if(not_found) {
    56     console.log('not_found_url: ', url);
    57     res.status(404).send('Not found');
    58   } else {
    59     console.log('proxy_url: ', url);
    60   }
    61 });
    62 
    63 const PORT = 8080;
    64 app.listen(PORT, () => {
    65   console.log('HTTP Server is running on: http://localhost:%s', PORT);
    66 });
  • 相关阅读:
    atom那些事儿
    浙江省和杭州市
    Web API之indexedDB和Web SQL
    绝对定位元素居中
    多列等高布局
    git生成ssh key及github ssh key对接
    vuejs模板使用方法
    css3动画图片波纹效果
    sticky footer布局,定位底部footer
    css3圆环闪烁动画
  • 原文地址:https://www.cnblogs.com/lifefriend/p/10019611.html
Copyright © 2020-2023  润新知