node快速入门-02

express 库

http://www.expressjs.com.cn/

干嘛的:nodejs库,不用基础做起,工作简单化

类似:koa

express特点:

二次封装,非侵入式,增强形

express搭建服务

express=require('express')

server=express()

server.listen(端口,地址,回调)

静态页面托管

express.static('./wwww')

server.use(express.static('./wwww'));

接口响应:

各种请求姿势: get/post/put/delete/....

server.请求姿势API(地址,处理函数)

server.get(url,(req,res,next)=>{})

server.post(url,(req,res,next)=>{})

....

jsonp请求 == get请求

server.get('/jsonp接口',(req,res,next)=>res.jsonp(json)

设置回调函数的key: server.set('jsonp callback name', '设定回调函数键');  默认callback

参数接受: req == 请求体

req.query 获取地址栏的数据

  req.body 获取非地址栏的数据  依赖中间件

  中间件使用: body-parser  1. npm install body-parser  2. require('body-parser')  3. server.use(中间件())

  req.params 获取动态接口名

  req.method 获取前端提交方式

发送给浏览器: res == 响应体

res.send(any) ~~ res.write + end

JSON: res.json(json)

jsonp: res.jsonp(响应数据) 响应数据-》jsonp请求时的回调函数

404 : res.status(404).send({error:1,msg:"Sorry can't find that!"})

静态文件: res.sendFile(path.resolve('public/error.html'))//渲染纯 HTML 文件

res.end(any)


后端跳转: res.redirect(url)

处理一部分接口 共有业务逻辑:

server.all('/admin/*',fn) all匹配全路径 处理所有HTTP 需要next 延续后续

use: 安装中间件 | 路由

server.use(地址,中间件|路由|函数体)

中间件(middleware): 不处理业务,只处理请求  到    结束响应  的中间部分

body-parser

中间件: npmjs.com  查看使用方式

body-parser 获取post数据,限定大小,约定返回数据类xx.urlencode({limit:xx})

扩展:

Request 对象 - request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。常见属性有:

req.app:当callback为外部文件时,用req.app访问express的实例

req.baseUrl:获取路由当前安装的URL路径

req.cookies:Cookies

req.fresh / req.stale:判断请求是否还「新鲜」

req.hostname / req.ip:获取主机名和IP地址

req.originalUrl:获取原始请求URL

req.path:获取请求路径

req.protocol:获取协议类型

req.route:获取当前匹配的路由

req.subdomains:获取子域名

req.accepts():检查可接受的请求的文档类型

req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的第一个可接受字符编码

req.get():获取指定的HTTP请求头

req.is():判断请求头Content-Type的MIME类型

Response 对象 - response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。常见属性有:

res.app:同req.app一样

res.append():追加指定HTTP头

res.set()在res.append()后将重置之前设置的头

res.cookie(name,value [,option]):设置Cookie

opition: domain / expires / httpOnly / maxAge / path / secure / signed

res.clearCookie():清除Cookie

res.download():传送指定路径的文件

res.get():返回指定的HTTP头

res.location():只设置响应的Location HTTP头,不设置状态码或者close response

res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。

res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type

res.set():设置HTTP头,传入object可以一次设置多个头

res.status():设置HTTP状态码

res.type():设置Content-Type的MIME类型



path 系统模块

磁盘路径:

编码:

windows:  'c:\\user\\admin\\a.jpg'

mac: ~/desktop/1901

UI:

windows: c:\user\admin

mac: ~/desktop/1901

path.parse('c:\\wamp\\xx.png'); 磁盘路径(str -> obj)

{

  root: 'c:\\', 盘符

  dir: 'c:\\wamp', 目录

  base: 'xx.png',  文件名

  ext: '.png', 扩展名

  name: 'xx' 文件,不含扩展名

}

path.join('磁盘路径1','磁盘路径2')

__dirname 魔术变量  返回当前文件所在的磁盘路径

path.dirname == __dirname  当前文件位置

path.resolve('磁盘路径1','磁盘路径n') 合并磁盘片段,右到左找根,左到右拼接,没有找到根,以当前文件路径为根

fs模块: 

文件操作是异步的

fs.rename('当前文件','该后的文件名',(err)=>{});

fs.readFile('当前文件','该后的文件名',(err)=>{});

multer:  文件上传

multer->文件名会随机->fs模块改名->path系统模块解析磁盘路径

文件上传:前端表单->后端接收到文件本身->保存到服务器上->给数据库记录文件一些信息->库返回给nodejs相关信息->nodejs返回给前端

前端:

后端:multer 接受 form-data编码数据

配置

let multer  = require('multer'); 引入

let objMulter = multer({ dest: './upload' }); 实例化  返回 multer对象

dest: 指定 保存位置(存到服务器)

app.use(objMulter.any());  any 允许上传任何文件

req.files 数组

fieldname: 表单name名

originalname: 上传的文件名

encoding: 编码方式

mimetype: 文件类型

buffer: 文件本身

size:尺寸

destination: 保存路径

filename: 保存后的文件名  不含后缀

path: 保存磁盘路径+保存后的文件名 不含后缀

路由(router):  告诉你去哪

前端:导向 路由 就 告诉浏览器应该去哪

后端: 子服务 一个路由就是一个小的服务(server/app)

1. 创建路由

router = express.Router();  返回路由对象

2. 导出路由

module.exports = router;

3. 安装路由

app.use('地址',router);

router.use('地址'子router) 需要next 延续

4. 路由处理响应:

router.响应API(地址, 处理函数)

router.get('/',fn)

router.post('/1',fn)

router.all('*',当前router路由下的验证工作) 需要next 延续

前后端交互流程

大后端:

用户发送请求 - > (http[s]请求) -> web服务器(收到) - > nodejs处理请求(返回静态、动态)->请求数据库服务(返回结果)->nodejs(接收)->渲染页面->浏览器(接收页面,完成最终渲染)

大前端:

前端 - > http[s]请求 -> web服务器(收到) - > nodejs处理请求(返回静态、动态)->请求数据库服务(返回结果)->nodejs(接收)->返回给前端(渲染)->浏览器(接收页面,完成最终渲染)

用户发送请求: href/backround:url('...')/src/locaction.href/ajax/jsonp/form>action @import(url...)

读的是资源

静态: json,font,css,js,img         

动态: ajax,form,jsonp,promise  要求(写的参数,数据)

mysql

关系数据库(二维表(表头))

数据库:需要安装服务端

服务端:

a) 开启 mysql服务

b) 安装mysql 开启服务

库操作:

客户端:

软件操作(UI工具)

wamp的客户端是phpmyadmin

phpstudy

navicat 收费

系统命令行: mysql 命令行

语言环境: 安装对应的客户端包 包内提供api

nodeJs(后台管理程序),依赖mysql库

库操作  编码方式 UUC

建|删 库(目录)

建: CREATE DATABASE  `2017-12-6` DEFAULT CHARACTER SET armscii8 COLLATE armscii8_general_ci;

建|删|改 表(文件)

创建表头(字段头)

CREATE TABLE  `2017-12-6`.`user` (

`name` VARCHAR( 32 ) NOT NULL ,

`age` INT( 3 ) NOT NULL ,

`address` VARCHAR( 128 ) NOT NULL

) ENGINE = INNODB

表操作 增删改查

增:

INSERT INTO 表 (字段列表) VALUES(值列表)

INSERT INTO user (name,age,address) VALUES('苏菲',38,'')

删:

DELETE FROM 表 WHERE 字段名=值

DELETE FROM user WHERE name='alex'

改:

UPDATE 表 SET 字段名=值 WHERE 字段名=值

UPDATE user set name='sufei' WHERE name='苏菲'

查:

SELECT ? FROM 表

SELECT * FROM user  查所有

mongoDb

下载:https://www.mongodb.com/download-center

安装:https://www.cnblogs.com/keyi/p/10984514.html

一路下一步

设置库 username:root/password:root123

注意:

1)  测试服务端是否启动:

a)理论上服务器会开机就启动

手动启动:

手动启动服务端:安装目录\Server\4.0\bin\  mongod 回车

b)服务服务器:

启动客户端 去 访问 安装目录\Server\4.0\bin\    mongo 回车

port=27017 默认端口

mongodb://127.0.0.1:27017 协议+IP+端口

2) 指定数据存储目录: 需要指定一次  ***

mongod --dbpath c:\data\db    db目录要手动创建

3) 环境变量:为了在任意盘符下去启动库  mongod服务端|mongo客户端

你可能感兴趣的:(node快速入门-02)