Express

原生的 http 在某些方面表现不足以应对我们的开发需求,所以我们需要使用框架来加快我们的开发效率。框架的目的就是提高效率,让我们的代码更高度统一

在Node 中,有很多 Web 开发框架,我们这里以学习express为主

参考网址:http://expressjs.com/

1.起步

1.1 安装:
npm install --save express
1.2 hello world
var express = require('express')
var app = express() app.get('/',function(req,res){
//推荐使用express的方法
res.send("hello world")
}) app.listen(3000,function(){
console.log("express app is running ...")
})
1.3 基本路由

路由器

  • 请求方法

  • 请求路径

  • 请求处理函数

get:

//当以 GET 方法请求 / 的时候,执行对应的处理函数
app.get('/',function(req,res){
res.send('hello world!')
})

post:

//当以 POST 方法请求 / 的时候,执行对应的处理函数
app.post('/',function(req,res){
res.send('Get a POST request')
})
1.4 静态服务
// /public资源
app.use(express.static('public'))
// /files资源
app.use(express.static('files'))
// /public/xxx
app.use('/public',express.static('public'))
// /static/xxx
app.use('/static',express.static('public')) app.use('/static',express.static(path.join(__dirname,'public')))

2.在Express中配置使用art-template模板引擎

安装:

npm install --save art-template
npm install --save express-art-template

配置:

//默认art
app.engine('art', require('express-art-template'))
//修改后html
app.engine('html', require('express-art-template'))

使用:

//使用修改后html的配置
app.get('/',function(req,res){
//express 默认会去项目中的 views 目录中找 index.html
res.render('index.html',{
title:'hello world'
})
})

注意:如果希望修改默认的views视图渲染存储目录,可以:

//第一个参数 views 千万不要写错
app.set('views',目录路径)

3.在Express中获取表单GET请求参数

Express内置了一个API,可以直接通过req.query来获取

req.query

注:在浏览器输入的地址,默认都是get请求

4.在Express中获取表单POST请求体数据

在Express中没有内置获取表单POST请求体的API,这里我们需要使用一个第三方包:body-parser

安装:

npm install --save body-parser

配置:

var express = require('express')
//0.引包
var bodyParser = require('body-parser') var app = express() //1.配置 body-parser
//只要加入这个配置,则在 req 请求对象上会多出来一个属性:body
//也就是说可以直接通过 req.body 来获取表单 POST 请求体数据了
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false })) // parse application/json
app.use(bodyParser.json())

使用:

app.use(function (req, res) {
res.setHeader('Content-Type', 'text/plain')
res.write('you posted:\n') //可以通过 req.body 来获取表单 POST 请求体数据
res.end(JSON.stringify(req.body, null, 2))
})

注意:req.body 返回的对象属性值都是字符串

5.使用nodemon工具自动重启服务

我们这里可以使用一个第三方命名工具:nodemon来帮助我们解决频繁修改代码重启服务器问题

nodemon是一个基于Node.js开发的一个第三方命令行工具,我们使用的时候需要独立安装:

#在任意目录执行该命令都可以
#也就是说,所有需要 --global 来安装的包都可以在任意目录执行
npm install --global nodemon

安装完毕之后,使用:

#之前使用 node
node app.js #现在使用 nodemon
nodemon app.js

只要是通过nodemon app.js启动的服务,则它会监视你的文件变化,当文件发生变化的时候,它会自动帮你重启服务器

6.Express - crud(路由)

6.1 模块化思想

模块如何划分:

  • 模块职责要单一

  • Vue

  • angular

  • React

  • 也非常有利于学习前端三大框架

6.2 起步
  • 初始化

  • 模板处理

6.3 路由设计

6.4 提取路由模块

router.js:

/*
router.js 路由模块
职责:
处理路由
根据不同的请求方法+请求路径设置具体的请求处理函数
*/
// 模块职责要单一,不要乱写
// 划分模块的目的就是增强项目代码的可维护性,提升开发效率 var express = require('express')
//1.创建一个路由容器
var router = express.Router()
//2.把路由都挂载到 router 路由容器中
router.get('/students', function(req,res){ })
router.get('/students/new',function(req,res){
res.render('new.html')
})
router.post('/students/new',function(req,res){ })
router.get('/students/edit',function(req,res){ })
router.post('/students/edit',function(req,res){ })
router.get('/students/delete',function(req,res){ })
//3.把 router 导出
module.exports = router

app.js:

var router = require("./router")

//挂载路由
app.use(router)
6.5 设计操作数据的API模块
/*
student.js
数据操作文件模块
职责:操作文件中的数据,只处理数据,不关心业务
*/ /*
获取所有学生列表
return 数组
*/
exports.find = function(){ } /*
添加保存学生 */
exports.save = function(){ } /*
更新学生
*/
exports.update = function(){ } /*
删除学生
*/
exports.delete = function(){ }
6.6 案例——学生管理系统——编写步骤
  • 处理模板

  • 配置开放静态资源

  • 配置模板引擎

  • 简单路由: /students 渲染静态页出来

  • 路由设计

  • 提取路由模块

  • 由于接下来一些新的业务操作都需要处理文件数据,所以我们需要封装 student.js

  • 先写好 student.js 文件结构

    • 查询所有学生列表的 API find

    • findById

    • save

    • updateById

    • deleteById

  • 实现具体功能

    • 通过路由收到请求

    • 接收请求中的数据(get、post)

      • req.query

      • req.body

    • 使用数据操纵 API 处理数据

    • 根据操作结果给客户端发送响应

  • 业务功能顺序

    • 列表

    • 添加

    • 编辑

    • 删除

  • ES6的两个重要API:find、findIndex

Nodejs之路(三)—— Nodejs之Express框架的更多相关文章

  1. nodejs学习笔记一:安装express框架并构建工程目录

    偶遇node是在一个阳光明媚的上午,无意间打开博客看到一片关于nodejs的介绍,通读全篇后,心情跌宕起伏,哎呀,这么好的东西我竟然现在才知道,这是最气的,于是马上开始制定学习nodejs计划,好了, ...

  2. nodejs学习笔记二:解析express框架项目文件

    上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添 ...

  3. nodejs学习笔记三——nodejs使用富文本插件ueditor

    在做自己的nodejs项目的时候遇到需要使用ueditor.原来下载的是ueditor的jsp版本.目录如下  在ueditor.config.js中有配置服务器home路径(这个home路径能找到u ...

  4. Express框架使用以及数据库公共操作类整理(Win7下的NodeJs)

    具体步骤: 1.安装开发工具WebStorm: 2.安装node/npm(下载地址:https://nodejs.org/download/)选择适合你的xxx.mis安装: 3.安装express框 ...

  5. Nodejs之使用express框架搭建WEB应用

      首先创建一个index.js,在里面引入相关的中间件,如果没有这些中间件,则需要在nodejs里进入index.js所在的文件夹安装这些模块,安装命令:npm install express ex ...

  6. Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架

    目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...

  7. 安装nodeJs静态服务器(NodeJs Express MVC 框架)

    安装 NodeJs Express MVC 框架   新建项目文件夹   打开cmd 执行以下操作:   一.使用Express框架 1)安装express3 $: npm install -g ex ...

  8. Centos 编译安装nodejs&express框架

    一. 下载nodejs 版本 wget http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz 二. 编译安装 cp node-v0.10.28.ta ...

  9. NodeJs针对Express框架配置Mysql进行数据库操作

    Express版本:4.14.1 说明:如下配置以express为例进行配置并进行测试,当然mysql中间件也可以在nodejs中单独使用. 参考:NodeJs的Mysql中间件Github地址 1. ...

  10. nodejs的Express框架源码分析、工作流程分析

    nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...

随机推荐

  1. 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)

    单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 说实话很不想写这篇文章,因为这和我一贯推崇的最好全部编译并使用w ...

  2. 大数据学习路线,来qun里分享干货,

    一.Linux lucene: 全文检索引擎的架构 solr: 基于lucene的全文搜索服务器,实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面. 推荐一个大数据学习群 ...

  3. luoguP3799 妖梦拼木棒 [组合数学]

    题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...

  4. bzoj1034题解

    [解题思路] 广义田忌赛马的贪心模型.如果当前实力最差的马比对手实力最差的马强,则匹配:如果当前实力最强的马比对手实力最强的马强,亦匹配:若上述两点均不成立,拿己方最差的马去匹配对手最强的马.复杂度O ...

  5. NX二次开发-UF_OBJ_cycle_by_name遍历名字

    使用前自己要看好名字是加在body,还是face,还是curve,或者其他,别加错了. NX9+VS2012 #include <uf.h> #include <uf_obj.h&g ...

  6. 【.NET类库】通过SharpSocket进行TCP/UDP通信数据传输

    类库作用: 用于基于TCP/UDP协议的数据通信,调用简单,高效. 封装了和业务无关的底层细节,让开发人员可以专注于做业务 完善的示例代码: 针对类库的几种用法,都提供了较为详细的示例代码 一.TCP ...

  7. 剑指offer——30栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  8. 如何用javascript高效的判断浏览器种类和版本

    <script type="text/javascript">        var Sys = {};        var ua = navigator.userA ...

  9. 【POJ】2387 Til the Cows Come Home

    题目链接:http://poj.org/problem?id=2387 题意:求从1到n的最短路 题解:板子题.spfa. 代码: #include<iostream> #include& ...

  10. 001-Java命名规范

    1. 包名 多个单词都小写xxxyyyzzz 2.类名和接口名 多单词组成时,所有单词的首字母大写XxxYyyZzz 3.变量名和方法名 多单词组成时,第一个单词首字母小写,后面单词首字母军大写 xx ...