express组件学习
一、express
可以做:web application、api...
特性:
- 适合写简单的路由系统
- 集成很多模板引擎
- 中间件系统
二、请求与响应
var express = require('express');
var app = express();
//据说第二个参数是一个中间件方法
app.get('/', function(req, res) {
//学会查api来学习更多知识,学会学习官方api文档
var resObj = req.method;
//send可以发送字符串、json(包含自动stringify)对象和数组
res.send(resObj);
})
app.listen(3000);
console.log('listening to port 3000');
三、路由参数
server.js
var express = require('express');
var app = express();
app.get('/profile/:id/user/:name', function(req, res) {
console.dir(req.params);
res.send('you requested to a profile page with the name of ' + req.params.name);
})
app.listen(3000);
console.log('listening to port 3000');
terminal

chrome

四、查询字符串
server.js
app.get('/', function(req, res) {
console.dir(req.query);
res.send('home page:' + req.query.find);
})
terminal

chrome

五、post请求和postman工具
同时处理x-www-form和json
var express = require('express');
var bodyparser = require('body-parser');
var app = express();
//create application/json parser
var jsonParser = bodyparser.json();
//create application/x-www-form-urlencoded parser
var urlencodedParser = bodyparser.urlencoded({ extended: false})
app.post('/', urlencodedParser,function (req, res) {
console.dir(req.body);
res.send(req.body.name);
})
app.post('/upload', jsonParser, function (req, res) {
console.dir(req.body);
res.send(req.body.name);
})
参考链接:github/express/body-parser
六、上传文件
form.html
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<h2>单图上传</h2>
<input type="file" name="logo">
<input type="submit" value="submit">
</form>
</body>
server.js
var express = require('express');
var bodyparser = require('body-parser');
var fs = require('fs');
var multer = require('multer');
var upload = multer({ dest: 'uploads/'});
var app = express();
//create application/json parser
var jsonParser = bodyparser.json();
//create application/x-www-form-urlencoded parser
var urlencodedParser = bodyparser.urlencoded({ extended: false})
app.get('/', function(req, res) {
console.dir(req.query);
res.send('home page:' + req.query.find);
})
app.get('/form', function(req, res) {
var form = fs.readFileSync('./form.html', { encoding: 'utf8'});
res.send(form);
})
app.post('/', urlencodedParser,function (req, res) {
console.dir(req.body);
res.send(req.body.name);
})
app.post('/upload', upload.single('logo'),function (req, res) {
res.send({'ret_code': 0});
})
app.listen(3000);
console.log('listening to port 3000');
结构变化

参考链接:github/express/multer
tips:
app.get('/form', function(req, res) {
var form = fs.readFileSync('./form.html', { encoding: 'utf8'});
res.send(form);
})
等价于
app.get('/form', function(req, res) {
res.sendFile(__dirname + '/form.html');
})
七、模板引擎
引入
app.set('view engine', 'ejs');
使用
server.js
app.get('/form/:name', function(req, res) {
var person = req.params.name;
res.render('form', { person: person});
res.sendFile(__dirname + '/form.html');
})
form.ejs
<h1><%= person %></h1>
遍历数组
<ul>
<%= data.hobbie.forEach(function(item){ %>
<li>
<%= item %>
</li>
<%= }) %>
</ul>
公用模板
使用
<%- include('partials/header.ejs') -%>
about.ejs
<body>
<%- include('partials/header.ejs') -%>
</body>
渲染
app.get('/about', function(req, res) {
var data = {age: 29, job: 'programmer', hobbie: ['eating', 'fighting', 'fishing']};
res.render('about', { data: data});
})
参考链接:ejs.co、pug
八、中间件
解释:请求与响应之间的处理过程是中间件发挥作用的地方。
好处:共用模块、全局性的操作
类型:
- 应用级中间件
- 路由级中间件
- 错误层次中间件
- 内置中间件
- 第三方中间件
执行顺序
app.use(function(req, res, next){
console.log('1');
next();
console.log('3');
})
app.use(function(req, res, next){
console.log('2');
})
路由中间件
server.js
var indexRouter = require('./routes/index.js');
var userRouter = require('./routes/user.js');
app.use('/', indexRouter);
app.use('/users', userRouter);
./route/index.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.send('root');
})
module.exports = router;
./route/user.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.send('user');
})
module.exports = router;
体会:用中间件写路由的好处
参考链接:express/using-middleware
express组件学习的更多相关文章
- C# BackgroundWorker组件学习入门介绍
C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...
- bootstrap组件学习
转自http://v3.bootcss.com/components/ bootstrap组件学习 矢量图标的用法<span class="glyphicon glyphicon-se ...
- C# BackgroundWorker组件学习
C# BackgroundWorker组件学习 C# BackgroundWorker组件学习 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用Ba ...
- [Python] wxPython 状态栏组件、消息对话框组件 学习总结(原创)
1.状态栏组件 1.基本介绍 上图: 红框框内的就是状态栏. 他可以分成若干个区块,比如上者分为了两个区块,并且比例是固定的,创建时可以指定 每个区块都能够显示 信息,一般通过 绑定事件 实时更新 各 ...
- Vue组件学习
根据Vue官方文档学习的笔记 在学习vue时,组件学习比较吃力,尤其是组件间的通信,所以总结一下,官方文档的组件部分. 注册组件 全局组件 语法如下,组件模板需要使用一个根标签包裹起来.data必须是 ...
- 开始nodejs+express的学习+实践(1)
开始nodejs+express的学习+实践(1) 开始nodejs+express的学习+实践(2) 开始nodejs+express的学习+实践(3) 开始nodejs+express的学习+实践 ...
- vue组件学习(二)
父子组件之间的数据传递, 父传给子: 直接在组件上传,如:<count :number="2"> (冒号和不要冒号的区别,有冒号会自动转为相应的类型)在名为count的 ...
- vue组件学习(一)
1, vue中的 is 的用法,有时候我们需要把一个组件绑定到指定的标签下,比如把tr组件放到table下,直接这样写是不行的, <!DOCTYPE html> <html lang ...
- express 的学习 (1)
- 安装`npm i express -S` - :引入express第三方对象 - :构建一个服务器对象 - :开启服务器监听端口 - :处理响应 1.下载 新建一个文件夹,cmd 进去,使用命令 ...
随机推荐
- 重置root密码
一. ubuntu忘记密码解决方法 1. 开机按shift 2. 选择高级选项,进入后选择恢复模式(不要按回车),按e进入编辑模式 3. 修改linux命令中的recovery nomodest 为 ...
- UDP与IP分片
一.引言  UDP是简单的面向数据报的运输层协议.UDP不提供可靠性:它负责把应用程序传给IP层的数据发送出去,不保证能导到目的地. 二.UDP首部  端口号表示发送进程和接受进程.由于IP层已经 ...
- P4168 [Violet]蒲公英 区间众数
$ \color{#0066ff}{ 题目描述 }$ 在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关. 为了简化起见,我们把所有的蒲公英看成一个长度为n的序列 \((a_1,a_2.. ...
- Opencv3.0: undefined reference to cv::imread(cv::String const&, int)
使用opencv,编译出错: undefined reference to cv::imread(cv::String const&, int) 自opencv3.0之后,图像读取相关代码在i ...
- python 控制台输出带颜色的文字的方法
python_控制台输出带颜色的文字方法 在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信 ...
- 什么是hive
Hadoop Hive概念学习系列之什么是Hive? 参考 <Hadoop大数据分析与挖掘实战>的在线电子书阅读 http://yuedu.baidu ...
- [BZOJ 5074][Lydsy1710月赛]小B的数字
传送门 \(\color{green}{solution}\) 设 \[b_{i}=2^{w_{i}},sum= \sum_{i=1}^{n}{w_{i}}\] 则对于任意\(a_{i}\)都有 \[ ...
- Go语言介绍
Go语言简介 Go语言是谷歌2009发布的第二款开源编程语言. Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. Go ...
- linux 查看进程启动时,用户的工作目录
在linux下查看进程大家都会想到用 ps -ef|grep XXX可是看到的不是全路径,怎么看全路径呢?每个进程启动之后在 /proc下面有一个于pid对应的路径例如:ps -ef|grep pyt ...
- maven——添加插件和添加依赖有什么区别?
依赖:运行时开发时都需要用到的jar包,比如项目中需要一个Json的jar包,就要添加一个依赖,这个依赖在项目运行时也需要,因此在项目打包时需要把这些依赖也打包进项目里: 插件:在项目开的发时需要,但 ...