1、项目基本框架搭建
1.1、项目初始化
npm init -y
1.2、安装Express框架生产依赖
npm i -S express
1.3、根目录下创建app.js文件作为入口文件,写入入口服务程序
//引入node框架
const express = require("express");
//创建服务对象
const app = express();
//监听get请求下的 '/'路由
app.get("/", function (req, res) {
res.send("hahah");
});
//开始服务对象的监听端口返回服务对象实例
const server = app.listen(5000, function () {
//通过服务对象实例调用address()获得当前服务程序的IP地址和端口号
const { address, port } = server.address();
console.log("服务已启动请访问http://%s:%s", address, port);
});
1.4、中间件函数(就相当于回调函数包含三个参数,回调时注入)必须放在app监听请求之前
function mylogger(req,res,next){
next();//必须调用次函数
}
app.use(mylogger);
1.5、路由
应用如何响应请求的一种规则 规则主要分两部分: 请求方法:get、post...... 请求的路径:/、/user、/.*fly$/......
app.get('/', function(req, res) {
res.send('hello node')
})
app.post('/', function(req, res) {
res.send('hello node')
})
1.6、异常处理
通过自定义异常处理中间件处理请求中产生的异常
app.get('/', function(req, res) {
throw new Error('something has error...')
})
const errorHandler = function (err, req, res, next) {
console.log('errorHandler...')
res.status(500)
res.send('down...')
}
app.use(errorHandler)
使用时需要注意两点:
第一: 参数一个不能少,否则会视为普通的中间件 第二:异常处理中间件需要在请求之后引用
2、项目框架优化
2.1、自定义路由中间件
- (1)在根目录下创建router文件夹并创建index.js文件
- (2)在app.js文件中导入该自定义路由中间件,再通过app.use()使用中间件
router/index.js
/* 自定义路由中间件 */
//引入express框架
const express = require("express");
//引入boom依赖快速生成浏览器错误信息
const boom = require("boom");
//导入二级路由
const userRouter = require("./map/user");
// 通过express框架创建路由实例来处理路由监听
const router = express.Router();
//监听get请求
router.get("/", (req, res) => {
res.send("中研在线");
});
//监听到一级路由是/user是使用自定义二级路由userRouter中间件
router.use("/user", userRouter);
//路由匹配是从上到下的,所以当前面所有的路由地址都不匹配时加载请求404错误中间件
router.use((req, res, next) => {
next(boom.notFound("接口不存在"));
});
//定义一个错误处理中间件 向客户端响应json格式的错误数据
router.use((err, req, res, next) => {
//获取错误信息
const msg = (err && err.message) || "系统错误";
//获取错误状态码
const statusCode = (err.output && err.output.statusCode) || 500;
//获取errorMsg
const errorMsg = (err.output && err.output.payload && err.output.payload.error) || err.message;
//返回状态码,并返回json格式错误异常信息
res.status(statusCode).json({
code: -1,
msg,
error: statusCode,
errorMsg,
});
});
module.exports = router;
app.js
//引入node框架
const express = require("express");
//引入自定义路由中间件函数
const router = require("./router");
//创建服务对象
const app = express();
//使用路由中间件
app.use("/", router);
//开始服务对象的监听端口返回服务对象实例
const server = app.listen(5000, function () {
//通过服务对象实例调用address()获得当前服务程序的IP地址和端口号
const { address, port } = server.address();
console.log("服务已启动请访问http://%s:%s", address, port);
});