A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝永亮 黑马粉丝团   /  2017-9-28 18:11  /  1584 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

9.配置package.json 中的scripts(执行命令)

"prebuild","prestart" 可以不配置,如果网非常差,前提node_module安装完美
    "prebuild": "npm install"
    "build": "babel ./src -d ./dist",

    "predev": "npm install",
    "dev": "supervisor ./index",

    "prestart": "npm run build",
    "start": "supervisor ./dist/bin/www"
开发环境

npm install 安装依赖包
npm run build 编译代码
npm run dev 通过babel-register改写require命令
生成环境

npm install -production 安装依赖包
npm run build 编译代码
npm start 直接执行app.js不需要改写babel-register命令
扩展(如果有需要请继续)

1.修改src/app.js src/config.js

修改config.js代码如下
viewPath: path.join(__dirname, './../views'),
publicPath:path.join(__dirname,'./../public'),
staticPath:path.join(__dirname,'./../static'),
node_modulesPath:path.join(__dirname,'./../node_modules'),
修改app.js中静态资源配置信息为
app.use('/public',express.static(config.publicPath));
app.use('/node_modules',express.static(config.node_modulesPath));
app.use('/static',express.static(config.staticPath));
2.使用ES6语法更新js代码

常用的语法有
var http = require('http') --> import http from 'http';//全部导入
var path = require('path') --> import { join } from 'path';//导入指定方法
var myModel = require('./myModel') --> import * as myModel from './myModel';//导入自定义模块
export function methodName(){}//在自定义模块中创建一个方法
export default methodName/objName;//使用export default 命令
通过 const 定义常量
通过 let 定义变量
使用模板字符串
通过class 定义类
直接函数名(){..}定义函数,无需通过function关键字
3.添加ORM框架--sequelize

安装 npm install sequelize
在config.js文件中添加数据库配置信息
DB_HOST:"127.0.0.1",
DB_USER:"root",
DB_PASSWORD:"root",
DB_DATABASE:"itcast",
DB_PORT:"3306",
DB_DIALECT : "mysql"
在src目录添加数据库工具sequelize.js
import Sequelize from "sequelize"
import Config from './config'

const sequelize = new Sequelize(Config.DB_DATABASE, Config.DB_USER, Config.DB_PASSWORD,{
host: Config.DB_HOST,
dialect: Config.DB_DIALECT
});

export default sequelize
在src目录下新建mapper文件夹,存放ORM映射文件,比如
import sequelize from '../sequelize'
import  Sequelize from 'sequelize'

const User = sequelize.define('t_user',{
user_name: Sequelize.STRING,
user_password: Sequelize.STRING
});
4.将代码修改成restful风格

修改routes目录下的 JS文件,我修改users.js为例代码如下
import  express from 'express';

import  handler  from '../controllers/users';

const router = express.Router();

/* GET users listing. */
router.get('/users', handler.getAllUsers);
//router.post('/users/:id', handler.getAllUsers);
//router.put('/users/:id', handler.getAllUsers);
//router.delete('/user/:id', handler.getAllUsers);

export default router;
5.错误处理

在app.js中已经添加了错误处理中间件,只需要再程序中修改代码即可
以前错误直接throw err, 现在修改为return next(err)即可
以controllers/users.js为例
getAllUsers: function (req, res, next) {
  readFile('xx',(err)=>{
    if(err){
      return next(err)
    }
  })
}
6.让路由自动扫描摆脱手动配置的束缚

1.安装glob
npm install --save glob
2.在config.js中添加路由目录
routePath: path.join(__dirname, 'routes/**/*.js');
3.在app.js钟引入glob,并且将之前写死的路由替换掉 注意:因为glob是异步,必须在加载完路由后才能加载404页面和错误页面,顺序不能乱这里使用ES6的Promise语法
之前的
//手动载入路由
app.use('/', index);
app.use('/api/users', users);
修改之后的
//自动载入路由,glob是异步的,错误处理应该在路由加载完毕后加载
new Promise((resolve, reject) => {
  glob(config.routePath, (err, files) => {
    if (err) {
      logger.error('自动载入路由失败'+err.message);
    }
    files.forEach((filePath) => {
      const router = require(filePath).default;

      if (typeof router === 'function') {
        app.use(router.prefix, router);
        logger.info('路由添加成功,路由前缀:' + router.prefix);
      }
    });
    resolve();
  })
}).then(function () {
  logger('app.js').info('自动载入路由成功');
  //配置404页面
  app.use((req, res, next) => {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
  });

//配置错误处理中间件,以前错误直接throw err, 现在修改为next(err)即可
  app.use((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.html');
  });
})
4.修改routes目录下的所有路由: 给路由挂载访问前缀
例如之前app.js中配置users路由是app.use('/api/users',users),前缀就是/api/users
只需要在users.js钟创建完毕route对象后添加前缀就可以
const router = express.Router();
router.prefix = '/api/users';
7.服务器端口配置

之前端口是写死在src/bin/www.js文件中的,现在将端口配置到config中
1.在config.js中添加配置信息
serverPort: "5000",
2.修改src/bin/www.js文件 引入config
import config from './../config'
修改代码var port = normalizePort(process.env.PORT || 3000);,修改为
var port = normalizePort(process.env.PORT || config.serverPort);
8.添加express代理中间件

1.安装http-proxy-middleware
npm install --save http-proxy-middleware
2.在config.js中添加,注意必须指定协议,我这里是http
  proxyPrefix:'/api',
  proxyTarget:'http://127.0.0.1:3000',
3.修改app.js
引入插件
import proxy from 'http-proxy-middleware';
添加中间件,越早引入越好,这样速度会比较快
if(config.proxyTarget &&config.proxyPrefix && config.proxyTarget!=""){
  app.use(config.proxyPrefix, proxy({target: config.proxyTarget, changeOrigin: true}));
  console.log('代理配置成功,代理uri:'+config.proxyPrefix+" 服务器: "+config.proxyTarget);
}
9.添加日志

express默认使用的是morgan,这里替换成log4js
1.安装log4js npm install --save log4js
2.在src目录添加logger.js文件,内容如下
import log4js from 'log4js'

log4js.configure({

  appenders: [
    {
      type: 'console',
      category: "console"

    }, //控制台输出
    {
      type: "file",
      filename: 'logs/log.log',
      pattern: "_yyyy-MM-dd",
      maxLogSize: 20480,
      backups: 3,
      category: 'dateFileLog'

    }//日期文件格式
  ],
  replaceConsole: true,   //替换console.log
  levels:{
    dateFileLog: 'debug',
    console: 'debug'
  }
});


const dateFileLog = log4js.getLogger('dateFileLog');
const consoleLog = log4js.getLogger('console');
export default   dateFileLog;//生产环境
// export default consoleLog;//开发环境
3.在app.js中配置中间件
import log4js from 'log4js';
//配置日志
app.use(log4js.connectLogger(logger, {level:'auto', format: ':method :url'}));
4.在某个js中使用日志记录功能,比如app.js
//引入刚才新建的logger.js
import  logger from './logger';

//调用logger.trace, debug, info, warn, error, fatal 方法
logger.debug("加载图标成功");
logger.error("失败");
5.在开发环境和生产环境中改变log的输出
开发环境输出到控制台,logger.js中用export default dateFileLog;
生产环境输出到文件,logger.js中用export default consoleLog;
6.修改supervisor 启动设置
因为我们的supervisor监控项目,只要有文件发生改变就回重启,而日志会不停的向文件中写入,这个时候要忽略日志文件 修改启动项 supervisor -i logs,README.MD,node_modules ./index
10.配置sesssion

1.安装npm install --save express-session
2.在app.js钟添加中间件
//配置session
app.use(session({
  secret: config.sessionSecret,
  cookie: {maxAge: 80000 },  //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
  resave: false,
  saveUninitialized: true,
}));
11.最后添加一些可能用到的npm包

formidable 图片上传
validator node后端表单校验
open node程序启动完毕,自动打开浏览器
express-session
http-proxy-middleware express中间代理
glob 文件搜索用到,可递归搜索
moment.js 时间处理 moment().format();
art-template
got

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马