express开发框架

1.express
http://www.expressjs.com.cn/
2.什么是express
基于 Node.js 平台,快速、开放、极简的 Web 开发框架(用express构建开放框架)
3.express使用流程
 
1.全局安装 express-generator(一台电脑安装一次即可)
生成器工具 express-generator 可以快速创建一个应用的骨架。
 
npm install express-generator -g
什么是应用的骨架:
当我们开发项目的时候,需要手动创建html文件夹,css文件夹,js文件夹,common文件夹等等以便于文件的分类,
如果使用手动创建这些文件夹会比较麻烦,这是我们可以用express-generator生成器工具快速创建一个应用的构架,即自动创建好各种分类的文件夹
 
2.在项目根目录中
1.初始化项目
npm init -y
 
2.安装express模块 npm install express
--save-dev 2. 生成文件(使用的ejs模板引擎)即创建了应用的骨架 express -e 3.安装依赖(系统根据package.json中的dev来安装依赖) npm install

 

4.可在package.json文件中修改运行node的方式
 
"scripts": {
    //yun'xingbin目录下的www文件
    "start": "supervisor ./bin/www"
 
},

运行npm run start ==== supervisor server,简化了命令书写,名字start是自己定义的
 
5.可在package.json设置端口号,默认的端口号为3000
 
"scripts": {
"start": "set PORT=1111 && supervisor ./bin/www"

 
 
 
 
分析express过程
1.分析bin/www文件
 
//引入模块(自定义模块)(分析自定义模块app.js)
var app = require('../app');
var debug = require('debug')('day4-express: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);
 
/**
* 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);
}
 
3.分析app.js自定义模块(中间件的使用必须在express实例之后,引入路由必须在express之前)
//引入模块
var createError = require('http-errors');//服务器报错模块
var express = require('express');//express模块
var path = require('path');
var cookieParser = require('cookie-parser');//cookie-parse中间件
var logger = require('morgan');//日志
 
//引入路由
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
 
//创建express实例,中间件的使用必须在express实例之后
var app = express();
 
// __dirname:当前目录的绝对路径/
//path.join()路径拼接,拼接后的路径为/views
app.set('views', path.join(__dirname, 'views'));
//ejs模板
app.set('view engine', 'ejs');
 
//使用中间件,app.use()专门用来使用中间件
app.use(logger('dev'));//日志中间件
app.use(express.json());//处理json的中间件
app.use(express.urlencoded({ extended: false }));//表单提交数据中间件
app.use(cookieParser());//cookie中间件
 
//所有静态文件的地址(所有的静态文件放在public中)
app.use(express.static(path.join(__dirname, 'public')));
 
//当访问跟路径/时,执行indexRouter路由
app.use('/', indexRouter);
//当访问/users路径时,执行usersRouter路由
app.use('/users', usersRouter);
 
// 当服务器的状态码为404,请求不到资源时执行的函数
app.use(function(req, res, next) {
  next(createError(404));
});
 
//当服务器500或者其他错误时执行的函数
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
 
  // render the error page
  res.status(err.status || 500);
  res.render('error');
});
 
module.exports = app;

 

posted @ 2019-01-01 16:15  SRH啦  阅读(315)  评论(0编辑  收藏  举报