express知识点
本篇文章主要内容
- 1.用Express在系统文件夹内搭建一个服务器
- 2.Express的路由(来自 Express 文档)
- 3.Express的中间件(这才是关键)
- 4.Express的一些零碎的知识(其实吧,官方文档确实是最好滴)
1.用Express在系统文件夹内搭建一个服务器
使用 Vue-cli 打包好的文件静态打开往往达不到我们的期望。所以,我们常常需要搭建个小服务器来打开 index.html 文件
首先来说明下为什么,打包后的 index.html 不能直接打开。可以看见下图中的
<link href=/static/css/app.4f732942728e787a43b1fb9509bc666b.css rel=stylesheet>
,这句话使用的是绝对路径,若想在本地使用,则需要使用./
这样的相对路径表示才对,或者在系统中就要用D://xx/x...
这样的本机内的绝对路径才是正确的。不过我们是要让它跑到服务器上的,这种修改并不能解决我们的问题。所以我们需要一个静态的服务器。
那么,怎么来实现呢?我们在目录外层写一个
server.js
,并用 node 启动它node test.js
,即可。
const express = require('express');
const app = express();
// dist内放置的是我们的目标 index.html,此后访问 localhost:3000 调用的会是我们默认的 index.html
app.use(express.static('./dist'));
app.listen(3000);
至此,我们通过 Express 以一个文件夹为基础,搭建了一个小型的服务器。它会自动检索文件夹内的 index.html 打开它。
2.Express 的路由
路由是指应用程序的端点(URI)如何响应客户端的请求。是不是有点抽象?简单点,说话的方式简单点。它就是门牌号。
比如 www.baidu.com 是 金桥路,那么 www.baidu.com/book 后面跟的 /book 就是 路由(我将之理解为具体的门牌号)。
既然我们知道了路由是门牌号,我们有什么样的自由度来玩弄它呢?前置依赖先写上:
var express = require('express')
var app = express()
- 我们也许只是想来参观、拜访一下 - GET
app.get('/', function (req, res) {
res.send('hello world')
})
- 也许我们是快递员,来送东西的 - POST
app.post('/', function (req, res) {
res.send('POST request to the homepage')
})
- 我们还可以进行 delete、put 等行为。
这些都是HTTP的常用的请求方法。他们只是让我们方便区分我们的目的,比如说我们想要删除,未必要使用 delete,我们只要修改后台程序,用 get/post 也可以用来删除。就像我对主人说,"我要来你家参观一下",只是口头上的约束,具体的行为还要看我本人的意愿(也许我来你家偷了东西?Delete)。
Express的中间件
我认为这是 Express 的重点,不过也很简单。Express本身很简单,不然为啥那么人用嘞~~~
你可知什么叫流水线?就是一道一道的作业。比如生产一个手机,我请机器1帮我制造外壳,我请机器2帮我塞入芯片,一直到一个手机出厂变为成品卖到你手里。中间件就是流水线上的工序。
我们发送一个请求,也许要经过一道流水线,被记录我是谁,再经过一道流水线,审查下我有没有发送黄色内容(我不是我没有),再经过一道流水线,你的请求是否合法?服务器能不能响应你的请求?最后,变为结果,送到你的面前。
const express = require('express');
const path = require('path');
const app = express();
const router = express.Router();
// router的一种写法,有的时候,门牌号一样,我们要进行不同的操作可以用此简写
router.route('/')
.get((req, res, next) => {
console.log('get');
next();
})
.post((req, res, next) => {
console.log('post');
next();
});
// 中间件1 - 打印时间
app.use((req, res, next) => {
console.log('Time', +Date.now());
next();
});
// 中间件2 - 路由
app.use(router);
app.listen(3000);
- 上面,我们使用了两个中间件,完成了一个很小的流水线。除了我们自己定义,也有一些别人写好的!~唉,API调用程序员,真是简单舒服啊。
var express = require('express')
var app = express()
var cookieParser = require('cookie-parser')
// load the cookie-parsing middleware
// 这样我们就使用了第三方的中间件
app.use(cookieParser())
4.零碎的 Express 知识点(用到了再看也不迟)
在 router 定义中,参数 req 内的一些属性是啥?
req.query
: 解析后的 url 中的 querystring,如?name=haha
,req.query 的值为{name: 'haha'}
req.params
: 解析 url 中的占位符,如/:name
,访问 /haha,req.params 的值为{name: 'haha'}
req.body
: 解析后请求体,需使用相关的模块,如 body-parser,请求体为{"name": "haha"}
,则 req.body 为{name: 'haha'}
关于设置Express不缓存
router.get('/',(req,res)=>{
res.setHeader('Cache-Control','no-cache,no-store,must-revalidate');
res.setHeader('pragma','no-cache');
res.setHeader('Expires','0');
res.send('hello,world');
});
- 关于 express(模板引擎的内容) 配合 ejs 并且使用.html作为后缀,(主要原因是我不想再多装一个Sublime ejs的插件)
app.engine('html', ejs.__express);
app.set('view engine','html');
本来的语句是app.set('view engine','ejs')
,用改版之后的就能用后缀为.html的文件不报错了!
- 关于express设置静态文件目录缓存的方法
app.use(express.static(path.join(__dirname, 'public'), {maxAge:1000*60*60}));
来自该回答:https://segmentfault.com/q/1010000007031019
也可以查express 4.x官网,默认的maxAge为0.
express.static(root, [options])
- 关于gulp如何使用gulp-nodemon和browser-sync达成热加载(乱入的,不过干脆就扔这里吧)
let gulp=require('gulp'),
nodemon=require('gulp-nodemon'),
browser=require('browser-sync');
let reload=browser.reload;
gulp.task('serve',function(){
browser.init({
proxy:'http://localhost:3000',
notify:false,
port:3001
});
let hot_files=['./views/*.html','./views/pages/*.html'];
gulp.watch(hot_files).on('change',reload);
});
gulp.task('node_app',function(){
nodemon({
script:'app.js',
ext:'js html',
env:{'NODE_ENV':'development'}
});
});
gulp.task('default',['node_app','serve']);
express知识点的更多相关文章
- Express框架开发知识点总结
express --view=pug myapp 以上语句在当前工作目录中创建名为 myapp 的 Express 应用程序,采用的模板是jade. 以前还在纠结使用hbs模板引擎或者ejs模板,实际 ...
- Dev Express Report 学习总结(七)Dev Express Reports 常见知识点总结
1. CalculatedField中常见表达式: A. For percent: [ValA]* 100 / ([ValA]+[ ValB]); PS. Please remre ...
- 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版
背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...
- DoraCMS 源码知识点备注
项目需要研究了下DoraCMS这款开源CMS,真心做的不错:).用的框架是常用的express 4 + mongoose,代码也很规范,值得学习. 源码中一些涉及到的小知识点备注下: https:// ...
- Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例
目录 前言 新建项目.建立数据库以及其它准备工作 新建express + ejs 项目:sampleEjs 创建数据库 修改package.json文件,安装session和mysql模块 样式和JQ ...
- Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...
- NodeJS with Express 4.x
Express 4.x 静态资源目录设置: //静态文件目录 app.use('/public', express.static(__dirname+'/public')); app.use('/da ...
- 阅读express的感悟
在github上看了半天的源码,也是云里雾里,勉强也算看完了,通过查看很多人的讲解也方便了我的理解,今天记录下来,也算是做个笔记. 进入express的源码文件里我们可以看到8个文件:middlewa ...
- express框架+jade+bootstrap+mysql开发用户注册登录项目
完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...
随机推荐
- [原]NYOJ-括号匹配-2(java)
大学生程序代写 //http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号配对问题 时间限制:3000 ms | 内存限制:65535 KB ...
- Cannot resolve class or package 'springframework' less... (Ctrl+F1) Inspection info:Spring XML mode
其实这个问题是由于MySQL 这个jar 包依赖类型默认是runtime ,也就是说只有运行时生效,所以虽然这里报错,但是不影响你代码运行. 解决方案: 将runtime 修改为Compile 即可 ...
- 学习大牛笔记nginx + gunicorn + supervisor
安装 gunicorn pip install gunicorn pip 是一个重要的工具,python 用来管理包.还有一个最佳生产就是每次使用 pip 安装的库,都写入一个 requirement ...
- 洛谷【P1138】第k小整数
题目传送门:https://www.luogu.org/problemnew/show/P1138 桶排: 对于值域在可以接受的范围内时,我们可以用不依赖比较的桶排去将数据排序.因为桶排不依赖比较排序 ...
- 点击Button调用另一个Dialog
资源视图--Dialog--右键--添加资源--新建--对话框--然后在已经生成的对话框中(解决资源视图中的dialog下的新生成的那个)右键--添加类.例如:添加CMyNewDlg类,在所要调的代码 ...
- C#程序运行计时
var stp = new System.Diagnostics.Stopwatch(); stp.Start();//计时启动 ..........程序代码........... stp.Stop( ...
- Code:template
ylbtech-Code: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.cn ...
- java基础知识(11)---多线程
多线程: 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.进程负责的是应用程序的空间的标示.线程负责的是应用程序的执行顺 ...
- J2EE 工作中注意事项
[转载于http://www.cnblogs.com/hemingwang0902/archive/2012/01/06/2314215.html] 根据当前项目中代码存在的一些问题,编写了一个编码注 ...
- JConsole远程监控配置
首先,看本机(Windows)安装了JRE没 Win > CMD 打开命令窗口 如有安装,则会显示以下版本信息:若没有显示,就安装吧 C:\Users\Administrator>java ...