Skip to main content

Express 搭建 Node.js 项目

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

一、Express 项目搭建

1、全局安装脚手架

npm i express-generator -g

2、新建 Express 项目

# 新建 Express 项目
express new-project

# 装包和启动
npm i & npm start

3、项目启动优化

与前面手动搭建 Node.js 项目同理,可以:

  • 安装 nodemon 监测文件变化,自动重启 node;
  • 安装 cross-env 跨平台运行脚本,设置环境变量,兼容 mac、linux 和 windows;
npm i nodemon cross-env --save-dev

接着在 package.json 中修改:

{
"scripts": {
"start": "node ./bin/www",
"dev": "cross-env NODE_ENV=dev nodemon ./bin/www",
"prd": "cross-env NODE_ENV=production nodemon ./bin/www"
},
}

然后通过 npm run dev 启动项目即可。

二、Request 和 Response 对象

1、Request 对象

request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。常见属性如下:

  • req.app:当 callback 为外部文件时,用 req.app 访问 express 的实例;
  • req.baseUrl:获取路由当前安装的 URL 路径;
  • req.body / req.cookies:获得「请求主体」/ Cookies;
  • req.fresh / req.stale:判断请求是否还「新鲜」
  • req.hostname / req.ip:获取主机名和 IP 地址;
  • req.originalUrl:获取原始请求 URL;
  • req.params:获取路由的 parameters;
  • req.path:获取请求路径;
  • req.protocol:获取协议类型;
  • req.query:获取 URL 的查询参数串;
  • req.route:获取当前匹配的路由;
  • req.subdomains:获取子域名;
  • req.accepts():检查可接受的请求的文档类型;
  • req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的首个可接受字符编码;
  • req.get():获取指定的 HTTP 请求头;
  • req.is():判断请求头 Content-Type 的 MIME 类型。

2、Response 对象

response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。常见属性如下:

  • res.app:同 req.app;
  • res.append():追加指定 HTTP 头;
  • res.set()res.append() 后将重置之前设置的头;
  • res.cookie(name,value [,option]):设置 Cookie;
  • opition:domain / expires / httpOnly / maxAge / path / secure / signed;
  • res.clearCookie():清除 Cookie;
  • res.download():传送指定路径的文件;
  • res.get():返回指定的 HTTP 头;
  • res.json():传送 JSON 响应;
  • res.jsonp():传送 JSONP 响应;
  • res.location():只设置响应的 Location HTTP 头,不设置状态码或 close response;
  • res.redirect():设置响应的 Location HTTP 头,并且设置状态码 302;
  • res.render(view,[locals],callback):渲染一个 view,同时向 callback 传递渲染后的字符串,如果在渲染过程中有错误发生 next(err) 将会被自动调用。callback 将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了;
  • res.send():传送 HTTP 响应;
  • res.sendFile(path [,options] [,fn]):传送指定路径的文件会自动根据文件 extension 设定 Content-Type;
  • res.set():设置 HTTP 头,传入 object 可以一次设置多个头;
  • res.status():设置 HTTP 状态码;
  • res.type():设置 Content-Type 的 MIME 类型。

三、Express 框架下开发接口

点击查看原生 Node.js 项目开发接口

app.js
// ...
const blogRouter = require('./routes/blog');

// ...
app.use('/api/blog', blogRouter);

// ...

四、配置与连接 MySQL 数据库

  1. 数据模型建立及分离
  2. 配置和连接 MySQL 数据库方法

配置和连接完,接下来进行接口对接开发:

routes/blog.js
const express = require('express');
const router = express.Router();
const {
getTotal,
getList,
getDetail,
newBlog,
updateBlog,
delBlog
} = require('../controller/blog')
const {
SuccessModel,
ErrorModel
} = require('../model/resModel')

// 获取博客列表总数
router.get('/count', (req, res, next) => {
const result = getTotal()

return result.then(count => {
res.json(new SuccessModel(count))
})
});

// 获取博客列表
router.post('/list', (req, res, next) => {
const { page_num, page_size } = req.body
const result = getList(page_num, page_size)

return result.then(listData => {
res.json(new SuccessModel(listData))
})
});

// 获取博客详情
router.post('/detail', (req, res, next) => {
const { id } = req.body
const result = getDetail(id)

return result.then(data => {
res.json(new SuccessModel(data))
})
});

module.exports = router;

点击查看搭建 Express 项目完整代码