Express搭建API服务
1. Express应用生成器
推荐使用命令快速生成Express应用。
相关文档可参考官网
英语官网:http://expressjs.com/
中文官网:http://www.expressjs.com.cn/
npx express-generator 应用生成成功后,进入项目目录,安装依赖。
cnpm install 启动应用。
npm start 浏览器输入 http://localhost:3000即可看到应用已运行。
2. 连接PostgreSQL数据库
PostgreSQL数据库可使用自带的pgAdmin进行管理。
安装 pg-promise 模块
cnpm install pg-promise --save 使用示例(database/config.js):
const pgp = require('pg-promise')();
const config = {
host: 'localhost',
port: 3306,
database: '******',
user: 'postgres',
password: '******'
};
const db = pgp(config);
module.exports = db; 然后在需要使用的地方引用即可:
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:
使用示例:
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模板引擎。
使用示例:
npm install express-handlebars --save 在Express 应用中,需要配置 view engine 来使用 express-handlebars。
具体是在app.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),小写。
//这个例子展示了一个挂载在 /user/:id 路径上的中间件函数。
app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
}) 路由级中间件
路由级中间件的工作方式与应用级中间件相同,只是它绑定到 express.Router() 的实例。
使用 router.use() 和 router.METHOD() 函数加载路由级中间件。
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):
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 模块,然后在应用级别或路由级别将其加载到你的应用中。
//示例说明了安装和加载 cookie 解析中间件函数 cookie-parser。
const cookieParser = require('cookie-parser')
app.use(cookieParser())