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返回给前端

前端: <input type=file enctype="multipart/form-data" name="fieldname1"

后端: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客户端

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335