Skip to content

Express搭建API服务

1. Express应用生成器

  推荐使用命令快速生成Express应用。
  相关文档可参考官网
  英语官网:http://expressjs.com/
  中文官网:http://www.expressjs.com.cn/

cmd
npx express-generator

  应用生成成功后,进入项目目录,安装依赖。

cmd
cnpm install

  启动应用。

cmd
npm start

  浏览器输入 http://localhost:3000即可看到应用已运行。

2. 连接PostgreSQL数据库

  PostgreSQL数据库可使用自带的pgAdmin进行管理。
  安装 pg-promise 模块

cmd
cnpm install pg-promise --save

  使用示例(database/config.js):

js
const pgp = require('pg-promise')();

const config = {
    host: 'localhost',
    port: 3306,
    database: '******',
    user: 'postgres',
    password: '******'
};

const db = pgp(config);

module.exports = db;

  然后在需要使用的地方引用即可:

js
const db = require('../database/config');

router.get('/', function(req, res, next) {
  db.query('SELECT * FROM users').then(data => {
    res.render('index', { title: 'handlebar is running', data: data });
  }).catch(err => {
    console.log(err);
    next(err);
  });
});

3. 路由的使用

  routes文件夹下,定义统一的路由处理入口index.js:

  使用示例:

js
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.get('/user', function(req, res, next) {
  res.send('i am loggined in');
});

module.exports = router;

4. 模板引擎的使用

  个人习惯花括号的语法,则使用Handlebars模板引擎。
  使用示例:

js
npm install express-handlebars --save

  在Express 应用中,需要配置 view engine 来使用 express-handlebars。
  具体是在app.js中添加以下代码:

js
const { engine } = require('express-handlebars');
// 配置 Handlebars
app.engine('hbs', engine({
  extname: '.hbs',// 设置文件扩展名
  defaultLayout: 'main',// 默认布局模板
  layoutsDir: path.join(__dirname, 'views/layouts'), // 布局目录
  partialsDir: path.join(__dirname, 'views/partials') // 部件目录,例如页头和页脚组件
}));

// 设置视图引擎
app.set('view engine', 'hbs');
app.set('views', path.join(__dirname, 'views'));

  在views文件夹下,定义统一的模板文件就可以使用handlebars的语法进行数据的渲染,例如index.hbs

5. 中间件的使用

  中间件函数是可以访问 请求对象 (req)、响应对象 (res) 以及应用请求-响应周期中的下一个中间件函数的函数。下一个中间件函数通常由一个名为 next 的变量表示。
  如果当前中间件函数没有结束请求-响应循环,它必须调用 next() 将控制权传递给下一个中间件函数。否则,请求将被挂起。
  Express 应用可以使用以下类型的中间件:
    应用级中间件
    路由级中间件
    错误处理中间件
    内置中间件
    第三方中间件

  应用及中间件:
  使用 app.use() 和 app.METHOD() 函数将应用级中间件绑定到 应用对象 的实例,其中 METHOD 是中间件函数处理的请求的 HTTP 方法(例如 GET、PUT 或 POST),小写。

js
//这个例子展示了一个挂载在 /user/:id 路径上的中间件函数。
app.use('/user/:id', (req, res, next) => {
  console.log('Request Type:', req.method)
  next()
})

  路由级中间件
  路由级中间件的工作方式与应用级中间件相同,只是它绑定到 express.Router() 的实例。
  使用 router.use() 和 router.METHOD() 函数加载路由级中间件。

js
router.use('/user/:id', (req, res, next) => {
  console.log('Request URL:', req.originalUrl)
  next()
}, (req, res, next) => {
  console.log('Request Type:', req.method)
  next()
})

  错误处理中间件

  与其他中间件函数相同的方式定义错误处理中间件函数,但使用四个参数而不是三个参数,特别是使用签名 (err, req, res, next):

js
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})

  内置中间件的使用

  Express 具有以下内置中间件函数:
    express.static 提供静态资源,例如 HTML 文件、图片等。
    express.json 使用 JSON 有效负载解析传入请求。注意:Express 4.16.0+ 提供
    express.urlencoded 使用 URL 编码的负载解析传入的请求。注意:Express 4.16.0+ 提供

  第三方中间件的使用

  使用第三方中间件向 Express 应用添加功能。
  安装所需功能的 Node.js 模块,然后在应用级别或路由级别将其加载到你的应用中。

js
//示例说明了安装和加载 cookie 解析中间件函数 cookie-parser。
const cookieParser = require('cookie-parser')
app.use(cookieParser())

The blog is powered by vitepress.