最近,不赶着做项目,于是想着怎样做公司的前后端分离,这个时候想到了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文件。

  

node+express+http-proxy-middleware做代理的更多相关文章

  1. 运用 node + express + http-proxy-middleware 实现前端代理跨域的 详细实例哦

    一.你需要准备的知识储备 运用node的包管理工具npm 安装插件.中间件的基本知识: 2.express框架的一些基础知识,知道如何建立一个小的服务器:晓得如何快速的搭建一个express框架小应用 ...

  2. Node+Express+MongoDB + Socket.io搭建实时聊天应用

    Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...

  3. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...

  4. 【Node】node.js实现服务器的反向代理,解决跨域问题

    跨域对于前端来说是一个老大难的问题,许多方法如jsonp.document.domain + iframe...都有或多或少的问题,一个最佳实践就是通过服务器nginx做反向代理,但奈何不懂相关知识, ...

  5. node解决跨域和服务器代理详解代码

    node中有很多解决服务器代理的插件,这里简介一个:express-http-proxy 之前网上查的使用node解决跨域的插件,有很多,例如,cors,koa2,这里解决跨域问题我拿原生解决的,ex ...

  6. 【原】小玩node+express爬虫-2

    上周写了一个node+experss的爬虫小入门.今天继续来学习一下,写一个爬虫2.0版本. 这次我们不再爬博客园了,咋玩点新的,爬爬电影天堂.因为每个周末都会在电影天堂下载一部电影来看看. talk ...

  7. 【原】小玩node+express爬虫-1

    最近开始重新学习node.js,之前学的都忘了.所以准备重新学一下,那么,先从一个简单的爬虫开始吧. 什么是爬虫 百度百科的解释: 爬虫即网络爬虫,是一种自动获取网页内容的程序.是搜索引擎的重要组成部 ...

  8. Node+Express+node-mysql 实战于演习 全套mysql(增删改查)

    最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+nod ...

  9. JQuery之proxy实现绑定代理

    在javascript中,this指代的对象时常会变化,这会造成程序,混乱,一般做法就是先将this保存在一个变量中,就不怕她变了,我们先看一个小例子 var A = function(){ this ...

随机推荐

  1. 22SpringMvc_jsp页面上的数据传递到控制器的说明

    假设有这个一个业务:在jsp页面上写入数据,然后把这个数据传递到后台. 效果如下:

  2. XML 是一种元语言, 可以用它来描述其他语言。

    A.正确 B.错误 解答:B XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup L ...

  3. 5.3 SpEL语法

    SqEL是一个可以独立于spring的表达式语言,即它可以用在XML中对语法进行简化 5.3 SpEL语法5.3.1 基本表达式一.字面量表达式: SpEL支持的字面量包括:字符串.数字类型(int. ...

  4. 【HDU】3622 Bomb Game(2-SAT)

    http://acm.hdu.edu.cn/showproblem.php?pid=3622 又是各种逗.. 2-SAT是一种二元约束,每个点可以置于两种状态,但只能处于一种状态,然后图是否有解就是2 ...

  5. Ubuntu16.04 Tomcat9的安装

    1. 从http://tomcat.apache.org/download-90.cgi 下载apache-tomcat-9.0.0.M11.tar.gz 2. 上传到Linux后移动到/opt/to ...

  6. pychram最新注册码

    2016年的激活码只能用到2017.2.25,于昨日已经过期了. 现提供最新激活码: BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZW ...

  7. CSS之各种居中

    本博客讨论居中情况设定为 总宽度不定,内容宽度不定 的情况.(改变大小时,仍然居中). 特别说明:在元素设置 position:absolute; 来设置居中效果时,除去博客下介绍的css3方法外,还 ...

  8. Ubuntu 编译安装搭配LNMP 环境

    这里用Nginx1.2.0+mysql5.6.33+php5.6.2搭配安装环境 ---------------------------------------------Nginx BEGIN--- ...

  9. 概览C++之const

    1.C语言中const与 C++中的const void main() { const int a = 10; int *p = (int*)&a; *p = 20; printf(" ...

  10. WebService远程调用(命令行调用)

    远程调用webservice 方法, 通过wsdl命令,生成webservice 对应asmx 文件的对应类(cs文件),然后将此cs文件引用到当前项目中,项目其他地方需要调用webservice方法 ...