ztj_03 koa改造工程
将项目目录整理一下,顺便加深理解
1.新增koa-json中间件
json解析
npm install koa-json --save
2.新增koa-onerror中间件
对错误进行统一处理
npm install koa-onerror --save
3.新增koa-static中间件
静态服务中间件
npm install koa-static--save
4.新增koa-logger中间件
日志模块
npm install koa-logger--save
增加中间件后的app.js
const Koa = require('koa');
const app = new Koa();
const json = require('koa-json');
const router = require('./router');
const bodyParser = require('koa-bodyparser');
const onerror = require('koa-onerror');
const koaStatic = require('koa-static');
const logger = require('koa-logger');
//错误处理
onerror(app);
app.use(bodyParser());
app.use(logger());
app.use(json());
app.use(koaStatic(__dirname + '/public'));
// logger日志
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = new Date() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
});
app
.use(router.routes())
.use(router.allowedMethods());
app.on('error', (err, ctx) => {
console.error('server error', err, ctx)
});
module.exports = app;
5.完善目录
1.新建router目录,保存router相关文件
2.新建public目录,静态资源目录
3.新建bin目录,新建www文件做启动文件
www文件代码,这段是koa项目生成器的启动文件代码
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('ztj:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
// app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app.callback());
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
最后修改下package.json的启动脚本
"scripts": {
"start": "node bin/www",
"dev": "./node_modules/.bin/nodemon bin/www",
"prd": "pm2 start bin/www",
"test": "echo \"Error: no test specified\" && exit 1"
},