【Express】Express与nodejs后端入门 (一)

10/11/2021 Expressbackend

# Express快速开始

# Hello World

  1. 确保已安装node.js

  2. npx直接生成项目。或者安装express-generator, 再用express生成

    // 方式1
    $ npx express-generator
    
    // 方式2
    $ npm install -g express-generator
    $ express
     
    $ express --view=pug myapp
    
  3. 在项目目录安装依赖

    $ cd myapp
    $ npm install
    
  4. 运行项目(Windows)。

    $ npm start
    
  5. 项目目录如下

    .
    ├── app.js
    ├── bin
    │   └── www
    ├── package.json
    ├── public
    │   ├── images
    │   ├── javascripts
    │   └── stylesheets
    │       └── style.css
    ├── routes
    │   ├── index.js
    │   └── users.js
    └── views
        ├── error.pug
        ├── index.pug
        └── layout.pug
    
    7 directories, 9 files
    
  6. 项目默认端口为3000, 浏览器输入http://localhost:3000效果如下:

    image-20211011151611574

# 基本路由(routing)

路由的定义基本结构如下

app.METHOD(PATH, HANDLER)
  • appexpress实例

  • METHODHTTP 请求方法, 全部小写

  • PATH是服务器中的路径

  • HANDLER为当路由匹配时的处理函数

简单的示例:

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.post('/', function (req, res) {
  res.send('Got a POST request')
})

app.put('/user', function (req, res) {
  res.send('Got a PUT request at /user')
})

app.delete('/user', function (req, res) {
  res.send('Got a DELETE request at /user')
})

# 静态文件服务

# 单个static路径

提供图片、CSS文件、Javascript文件等服务,可以使用Express内置的中间件函数express.static

函数调用方式:

express.static(root, [options])

比如,可以按照下方代码提供项目路径下public目录下的静态文件:

app.use(express.static('public'))

现在,向public文件夹下添加图片demo.jpg,就可以通过http://localhost:3000/demo.jpg这个地址访问该图片了。

Express 相对于提供的路径查找文件,所以静态路径的名称(如上面的public)将不会展示在URL中

# 多个static路径

Express支持添加多个静态路径。多次调用express.static即可实现

app.use(express.static('public'))
app.use(express.static('files'))

相对于单个路径,配置多个路径时,Express 会顺序查找静态路径中的内容。如此时向files文件夹添加一张图片1.png, 访问http://localhost:3000/1.png时,Express会经历类似: “查找public路径=> 查找失败=> 查找files路径=> 查找成功 ”的过程,最后成功返回1.png图片;

注意: 为了获得最佳效果, 使用 反向代理 (opens new window) 缓存可以提高静态文件服务的表现。

# 请求路径修改

可以添加一个不存在的虚拟路径作为静态文件服务的路径前缀。app.use函数支持提供一个path参数作为中间件函数的触发路径。

app.use('/static', express.static('public'))

这样, 使用以下路径就可以访问上面提到的文件了:

http://localhost:3000/static/demo.jpg

http://localhost:3000/static/1.png

# 最佳实践:使用绝对路径

但是,express.static函数的路径参数是相对于启动node进程服务的路径。如果从其他目录启动express app,更安全的做法是使用绝对路径:

const path = require('path')
app.use('/static', express.static(path.join(__dirname, 'public')))
Home~in this corner~
Leina