1.引入Express 并 建立Express框架实例css
const express = require('express'); const app = express(); app.get('/',function(req, res) { res.send('Hello index'); }) const server = app.listen(8081,'127.0.0.1', function () { const host = server.address().address const port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })
这里咱们还能够用npm 全局安装supervisor,用于咱们启动服务,好处就是不须要每次写完node脚本在去命令行输入node xxx.js来从新跑,supervisor用于热更新,咱们每次更改完node脚本,直接在浏览器刷新就好。不须要从新手动跑服务html
3.请求与响应 request 和 response 对象。
request 对象表示HTTP请求,即网站对服务器进行对求情,当中包含请求查询字符串,参数,内容,HTTp头部等属性
req.app:当callback为外部文件时,用req.app访问express的实例
req.baseUrl:获取路由当前安装的URL路径
req.body / req.cookies:得到「请求主体」/ Cookies
req.fresh / req.stale:判断请求是否还「新鲜」
req.hostname / req.ip:获取主机名和IP地址
req.originalUrl:获取原始请求URL
req.params:获取路由的parameters
req.path:获取请求路径
req.protocol:获取协议类型
req.query:获取URL的查询参数串
req.route:获取当前匹配的路由
req.subdomains:获取子域名
req.accepts():检查可接受的请求的文档类型
req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的第一个可接受字符编码
req.get():获取指定的HTTP请求头
req.is():判断请求头Content-Type的MIME类型
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.json():传送JSON响应
res.jsonp():传送JSONP响应
res.location():只设置响应的Location HTTP头,不设置状态码或者close response
res.redirect():设置响应的Location HTTP头,而且设置状态码302
res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串,若是在渲染过程当中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。
res.send():传送HTTP响应
res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type
res.set():设置HTTP头,传入object能够一次设置多个头
res.status():设置HTTP状态码
res.type():设置Content-Type的MIME类型
4 路由 上面已经了解HTTP请求的基本应用,而路由决定用哪些脚本去响应客户端请求,
在HTTP请求中,咱们经过路由提取出请求的URL以及GET/post参数
建立express_demo.js
经过不一样的URL来区分处理。node
const express = require('express') const app = express() app.use('/public', express.static('public')) app.get('/', function(req, res) { console.log('主页 GET 请求') res.send('Hello Get') }) app.post('/', function(req, res) { console.log('主页 POST 请求') res.send('Hello POST') }) app.get('/del_user', function(req, res) { console.log('/del_user响应DELETE请求') res.send("删除页面") }) app.get('/list_user', function(req, res) { console.log('/list_user GET 请求') res.send('用户列表页面') }) app.get('/ab*cd', function(req, res) { console.log('/ab*cd GET 请求') res.send('正则匹配') }) const server = app.listen('8080', '127.0.0.1', function(){ const host = server.address().address const port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })
5 接下来是静态文件,express提供了内置中间件express.static 来设置静态文件。
咱们能够建立一个public文件夹来存放img,css,js等,咱们先存放一张图片
而后经过app.use('/public', express.static('public'))
咱们就能够经过浏览器访问127.0.0.1/piblic/images/迷笛.jpg,就能够看到咱们存放在public的图片了express
这是文件路径npm
在代码里加入json
app.use('/public', express.static('public'))
GET方法,咱们建立一个index.html 写一个form 经过GET方法向指定路径提交参数,而后经过server.js里的process_get路由来处理输入
1.浏览器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <form action="http://127.0.0.1:8080/process_get" method="GET"> First Name:<input type="text" name="first_name"><br/> Lase Name:<input type="text" name="last_name"><br/> <input type="submit"> </form> </body> </html>
2.服务器
app.use('/public', express.static('public')); app.get('/', function(req, res){ res.sendFile(__dirname+ '/' + 'index.html') }) app.get('/process_get',function(req, res) { const response = { 'first_name': req.query.first_name, 'last_name': req.query.last_name } console.log(response) res.end(JSON.stringify(response)) }) const server = app.listen('8080','127.0.0.1', function(){ const host = server.address().address const port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })
POST方法 建立一个index.html写一个form 经过POST方法向指定路径提交参数,而后经过server.js里的process_get路由来处理输入
这里要注意 经过post方法须要引入body-parser 用于处理 JSON, Raw, Text 和 URL 编码的数据
1.cookie
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <form action="http://127.0.0.1:8080/process_get" method="POST"> First Name:<input type="text" name="first_name"><br/> Lase Name:<input type="text" name="last_name"><br/> <input type="submit"> </form> </body> </html>
2.app
const urlencodeParser = bodyParser.urlencoded({extended:false}) app.use('/public', express.static('public')); app.get('/', function(req, res){ res.sendFile(__dirname+ '/' + 'index.html') }) app.post('/process_get', urlencodeParser, function(req, res) { const response = { 'first_name': req.body.first_name, 'last_name': req.body.last_name } console.log(response) res.end(JSON.stringify(response)) }) const server = app.listen('8080','127.0.0.1', function(){ const host = server.address().address const port = server.address().port console.log("应用实例,访问地址为 http://%s:%s", host, port) })
Cookie 管理
咱们能够使用中间件向 Node.js 服务器发送 cookie 信息,如下代码输出了客户端发送的 cookie 信息:
const express = require('express') const app = express() const util = require('util') const cookieParser = require('cookie-parser') app.use(cookieParser()) app.get('/', function(req, res) { console.log('cookie:' + util.inspect(req.cookies)) }) app.listen('8080','127.0.0.1')