在要执行文件的目录里,先生成包文件npm init
在相应的主文件目录里通过npm install express --save
把express下载下来
var express = require("express")
var app=express();
app.get("/",function(req,res){
console.log(req.url)
res.end(
`
Document
hello Express!你好
`
);
})
app.listen(3000,function(){
console.log("3000 port server is running ......")
});
var express = require("express")
var app=express();
静态资源文件通俗的可以理解成对于不同的用户来说,内容都不会变化的文件。比如不管是任何人访问百度,他们所接收到的看到的图片、css文件和前端javascript文件都是一样的,我们称这类文件为静态资源文件。
那么响应的,对于不同用户做出不同反应的就是动态文件了,张三李四王五登录百度,百度会分别对他们显示"你好张三"、“你好李四”、“你好王五”,那么负责这么动态逻辑的文件就是动态文件了,根据你是用的技术不同,动态文件可能是.jsp文件、php文件或者我们node.js的服务器端js文件。
app.use
是浏览器里面请求地址URL中的一部分:即http:localhost:8000/
里面的/
, 默认URL是'/'
,也就是处理任何请求,同时要注意的是他会处理path下的子路径,比如如果设置path为’/hello’,那么当请求路径为’/hello/’,’/hello/nihao’,’/hello/bye’这样的请求都会交给app.use
处理的
expres.static是文件地址,为了提供对静态资源文件(图片、csss文件、javascript文件)的服务,请使用Express内置的中间函数 express.static 。Express 会在静态资源目录下查找文件,所以 不需要把静态目录作为URL的一部分
。
app.use('/img/',express.static(__dirname+'/img'))//绝对路径写法
app.use('/img/', express.static('./img/'))//相对对路径写法
app.use('/img/', express.static('img'))//相对对路径另一种写法
app.use('/public/',express.static('./public/'))
use
里面是请求的URL
路径,static
是本地文件路径
简单的来说就是用use
函数里面的请求url
路径来替换static
里面的路径了
例如app.use('/a/b/c',express.static('./public/'))
就是说要请求public
下面的test.img
时,url
路径里面不能有public
应该是http:localhost:8000/a/b/c/test.img
app.use(express.static('./public/'))
要请求public
下面的test.img
时,url
路径里面仍然是不能有public
应该是http:localhost:8000/test.img
npm install --global nodemon
启动时是nodemon app.js
这样每次修改就不要重新启动
npm install --save art-template
npm install --save express-art-template
app.engine('html', require('express-art-template'))
.html
结尾的文件的时候,使用 art-template 模板引擎res.render('html模板名', {模板数据})
render
render
方法默认是不可以使用,但是如果配置了模板引擎就可以使用了注意:
第一个参数不能写路径
,默认会去项目中的 views
目录查找该模板文件views
目录中app.set('views', render函数的默认路径)
第一个参数必须是views
,不能修改req.query 只能拿 get 请求参数,配置 body-parser 中间件(插件,专门用来解析表单 POST 请求体)
npm install --save body-parser
req
会多一个字段属性body
body
返回值是一个对象,里面是键值对储存的参数// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
urlencoded
方法主要解析类似于网址后缀的参数形式 post的默认格式,使用js中URLencode转码方法。包括将name、value中的空格替换为加号;将非ascii字符做百分号编码;将input的name、value用=
连接,不同的input
之间用&
连接,即:key=value&key=value
json
主要用来解析json样式urlencoded
方法返回的对象是一个键值对,当 extended
为false
的时候,键值对中的值就为String
或Array
形式,为true
的时候,则可为任何数据类型。false
:表示使用系统模块querystring来处理,也是官方推荐的true
:表示使用第三方模块qs来处理中间件
:处理请求的,本质就是个函数,在 Express 中,对中间件有几种分类
Request
请求对象Response
响应对象next
下一个中间件next
是一个方法,用来调用下一个中间件的不是调用紧挨着的那个
) app.use(function (req, res, next) {
console.log('1')
next()
})
app.use(function (req, res, next) {
console.log('2')
next()
})
next
的时候,如果传递了参数,则直接往后
找到带有 四个参数
的应用程序级别中间件next
传递错误对象app.get('/', function (req, res, next) {
fs.readFile('.d/sa./d.sa/.dsa', function (err, data) {
if (err) {
next(err)
}
})
})
错误处理中间件
// 配置错误处理中间件
app.use(function (err, req, res, next) {
res.status(500).send(err.message)
})