node.js輕鬆搭建一個伺服器
前端獲取資料時經常遇見跨域問題,以前一直用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': { 9target: ' 10} 11 };交流學習圈582735936 12 13 app.use(function(req, res,next) { 14const url = req.url; 15if (req.method == 'OPTIONS') { 16console.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 24res.status(200).send('OK'); 25return; 26} 27 28// console.log('req_url: ', url); 29next(); 30 }); 31 32 交流學習圈582735936 33 app.use(express.static(path.join(__dirname, 'static'))); 34 35 app.use('/', function(req, res) { 36const url = req.url; 37const proxy = Object.keys(proxyTable); 38let not_found = true; 39for (let index = 0; index < proxy.length; index++) { 40const k = proxy[index]; 41const i = url.indexOf(k); 42if (i >= 0) { 43not_found = false; 44const element = proxyTable[k]; 45const newUrl = element.target + url.slice(i+k.length); 46req.pipe(request({url: newUrl, timeout: 60000},(err)=>{ 47if(err){ 48console.log('error_url: ', err.code,url); 49res.status(500).send(''); 50} 51})).pipe(res); 52break; 53} 54} 55if(not_found) { 56console.log('not_found_url: ', url); 57res.status(404).send('Not found'); 58} else { 59console.log('proxy_url: ', url); 60} 61 }); 62 交流學習圈582735936 63 const PORT = 8080; 64 app.listen(PORT, () => { 65console.log 66 });