• node+express+http-proxy-middleware做代理


    最近,不赶着做项目,于是想着怎样做公司的前后端分离,这个时候想到了nodejs,于是打算今天做一个代理的demo,其实代码很简单,但是一直卡在一个地方,现在问题解决了,贴上代码和截图。

    html

    <!DOCTYPE html>
    <html>
    <head>
        <title>首页</title>
        <meta charset="utf-8">
        <script type="text/javascript" src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
        <style type="text/css">
            .hello{
                color: #428bca;
            }
        </style>
    </head>
    <body>
        <h3>这是index页面</h3>
    
        <span class="hello">你可以点击这里</span>
    
        <script type="text/javascript">
            $(function(){
                var contextPath = 'http://localhost:3000';
                $('.hello').on('click',function(){
                    $.ajax({
                        type:'get',
                        data:'click',
                        url:contextPath+'/api/hello',
                        success:function(data){
                            console.log(data);
                        },
                        error:function(data){
                            console.log(data);
                        }
    
                    })
                })
            })
        </script>
    
    </body>
    </html>
    

    localhost:3000服务端的代码

    const express = require('express');
    const proxy = require('http-proxy-middleware');//引入代理中间件
    const app = express();
    app.use(express.static('public'));
    //app.use(express.static('client'));
    
    // Add middleware for http proxying 
    const apiProxy = proxy('/api', { target: 'http://localhost:8080',changeOrigin: true });//将服务器代理到localhost:8080端口上[本地服务器为localhost:3000]
    app.use('/api/*', apiProxy);//api子目录下的都是用代理
    
    // Render your site
    app.get('/index.htm', function(req,res){
         res.sendFile(__dirname+'/src/index.html');
    });
    
    
    
    app.listen(3000, () => {
      console.log('Listening on: http://localhost:3000');
    });
    

    localhost:8080服务上的代码

    var express = require('express');
    var app = express();
    app.use(express.static('public'));
    var server = app.listen(8080,function(){
        var host = server.address().address;
        var port = server.address().port;
        console.log('应用实例,访问地址为 http://%s:%s',host,port);
    })
    
    app.get('/api/hello', function(req,res){
         let data = {}
         data["name"] = "lucy";
         data["age"] = "23";
         res.send(data);
    });
    

    项目结构截图

      

      

    其中需要注意的一个细节是,当起了一个本地服务器,那么静态文件的引入会有一个问题,解决办法如下Nodejs Express下引入本地文件的方法 出处:http://www.cnblogs.com/cocos2014/p/4378548.html?utm_source=tuicool&utm_medium=referral

    Express的结构如下:

        |---node_modules------用于安装本地模块。

        |---public------------用于存放用户可以下载到的文件,比如图片、脚本文件、样式表等。
        |---routes------------用于存放路由文件。
        |---views-------------用于存放网页的模板。
        |---app.js------------应用程序的启动脚本。
        |---package.json------项目的配置文件。
     
    从上述结构中可知要把本地文件放入public中,比如脚本文件js文件就可以放入public文件夹下的javascripts中。
    至于为什么放到其他位置不起作用,答案如下:
    app.js中对于引入静态文件的程序如下:
    app.use(express.static(path.join(__dirname, 'public')));//__dirname为程序执行时的绝对路径。
    这样一来,就指明了本地文件的引入方法。所以说把本地文件放入public下就有理有据了,下面讲述一下在Express Ejs中具体的使用方法。
    例如想引入本地的bootpicker.js文件,只需在html head中加入一下代码:
    <script src="/javascripts/datepicker.js" type="text/javascript"></script>
    当浏览器发出非HTML文件请求时,服务器端就到public目录下寻找javascripts,再到javascripts下寻找bootpicker.js文件。

      

  • 相关阅读:
    github
    保存中文文本
    python3与 python2 urllib模块区别
    gitbook 使用粘自csdn
    html基础
    R语言学习笔记之十
    R语言学习笔记之九
    R语言学习笔记之八
    R语言学习笔记之七
    R语言学习笔记之六
  • 原文地址:https://www.cnblogs.com/MonaSong/p/6555342.html
Copyright © 2020-2023  润新知