express使用笔记

118 阅读4分钟

Express

原生的http在某些方面不足以应对我们的开发需求,所以我们需要使用框架来加快开发效率让我们的开发高度统一

安装

npm install --save express

express开启node服务

const express = require('express'); //引入express函数

const app = express(); //调用express函数得到返回值app

app.get('/', (req, res) => {
    res.send('index');
}) //发起get请求

app.listen(3000, () => {
    console.log('服务已开启,请通过3000端口访问...');
}) //监听node服务

1. 基本路由

get

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

post

//当你以POST方法请求的时候,指定对应函数
app.post('/',function(req,res){
  res.send('Got a POST request')  
})

开放静态资源,public目录

app.use('url路径开头',express.static('资源目录'))

//当以/public/开头的时候,去./public/寻找资源
app.use('/public/', express.static('./public/'));

//表示,只有当以/a/开头的时候,才可以访问./public/内部的文件
app.use('/a/', express.static('./public/'));

//当省略第一个参数的时候,可以通过省略/public/的方式来访问
app.use(express.static('./public/'));

www.expressjs.com.cn/starter/sta…

2. path文件操作模块

const path = require('path') //引入

注意不要使用 ‘\’ 作为连接符,否则会将后面一个字符转译

path.basename

  • 获取一个路径的文件名(默认包含扩展名)
console.log(path.basename('C:/Users/27843/Desktop/node.js学习'))
// node.js学习

path.dirname

  • 获取一个路径的目录部分
console.log(path.dirname('C:/Users/27843/Desktop/node.js学习'))
// C:/Users/27843/Desktop

path.extname

  • 获取一个路径中的扩展名部分
console.log(path.extname('C:/Users/27843/Desktop/node.js学习'))
.js学习

path.parse

  • 把一个路径转换为对象
    • root 根路径
    • dir 目录
    • base 文件名 包含后缀
    • ext 后缀名
    • name 不包含后缀名的文件名
console.log(path.parse('C:/Users/27843/Desktop/node.js学习'))
// 运行结果
{
  root: 'C:/',
  dir: 'C:/Users/27843/Desktop',
  base: 'node.js学习',
  ext: '.js学习',
  name: 'node'
}
  • path.join

    • 拼接路径
    console.log(path.join('C:/Users/27843/Desktop', '/node.js学习'))
    // C:\Users\27843\Desktop\node.js学习
    
  • path.isAbsolute

    • 判断一个路径是否是绝对路径
    console.log(path.isAbsolute('C:/Users/27843/Desktop/node.js学习'))
    // true
    

官方文档 nodejs.cn/api/path.ht…

3. node绝对路径

在每个模块中,处理require,exports等模块相关API之外,还有两个特殊成员

  • __dirname 动态获取可以用来获取当前文件模块所属目录的绝对路径
  • __filename动态获取可以用来获取当前文件的绝对路径

在node中,使用相对命令是不可靠的,因为我们的相对路径是相对于命令行的执行位置的

所以为了解决这个问题,只需要把相对路径变成绝对路径

这里我们可以使用__dirname或者filename来解决问题

为了避免手动拼接字符串带来的低级错误,我们推荐使用path.join来辅助拼接

path.join(__dirname, './node_modules')

以后在文件操作中,我们使用的相对路径尽量都转换成绝对路径

补充:模块中的路径标识和这里的路径没关系,不需要改变使用方式在Express获取表单GET请求体数据

4. express带参get请求

不需要使用url模块,直接req.query即可

app.get('/pinglun', function(req, res) {
    var comment = req.query;
    comment.dateTime = '2020年10月26日 12:26:51';
    comments.unshift(comment);
	//express重定向 给res添加redirect方法
    res.redirect('/');
})
//使用req.query传递我们需要的数据
router.get('/profile/:id', passport.authenticate('jwt', { session: false }), (req, res) => {
   console.log(req.params.id)
})
//url: http://localhost:3000/profile/2
// log: 2

express重定向,res.redirect('/')

5. 获取表单POST请求体数据

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

安装

npm install --save body-parser

配置

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

//配置body-paeser
//只要加入这个配置,则在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))
})

6. express实现后端路由

路由文件router.js

var express = require('express');
//创建一个路由容器
var router = express.Router();

//将app改为router
router.get('/students/new', function(req, res) {
    fs.readFile('./views/new.html', function(error, data) {
        if (error) {
            return res.send('500 服务器错误')
        }
        res.end(data)
    })
})

router.post('/students/new', function(req, res) {

})

//导出router
module.exports = router;

app中引入路由文件和使用路由文件

//引入router模块
var router = require('./router');

//把router挂载到app服务中
app.use(router);