搭建简单的node项目

npm init -y

生成package.json文件
相较于npm init 省去了回车

es6模块化

node不能直接编译es6

安装: npm i -S babel-cli babel-preset-env babel-plugin-add-module-exports
检验是否安装成功在这里插入图片描述
①package.json中配置start—>②配置.babelrc文件—>③npm run start
.babelrc文件作用: Bable在执行编译过程中,会从根目录下找到.babelrc文件中读取配置(安装babel无法正常工作 需要配置文件)
在这里插入图片描述
在这里插入图片描述

启动项目

npm run start
跨域写在拦截器中

保存项目自动重启服务
npm i -S nodemon
在这里插入图片描述

// config/myexpress.js
let express = require('express')
let bodyparse = require('body-parser')
let util = require('util')

export default function (){
  let app = express()
  // 暴露app.listen 把监听方法延迟
  app.listenAsync = util.promisify(app.listen)

  // 跨域
  app.use((req, res, next) =>{
    // 来源 方法 头(token...)
    res.setHeader('Access-Control-Allow-Orgin', '*')
    res.setHeader('Access-Control-Allow-Methods', '*')
    res.setHeader('Access-Control-Allow-Headers', '*')
    next()
  })


  // 解析前端json格式
  app.use(bodyparse.json())
  // 解析前端发来的表单格式
  app.use(bodyparse.urlencoded({extended: true}))


  app.get('/', (req, res) =>{
    res.status(200).send('hello')
  })
  // app.listen(3000, () =>{
  //   console.log('port ok')
  // })
  return app
}
// server.js
import myexpress from './config/myexpress'

let server = myexpress()
let port = 5000
server.listenAsync(port).then(()=>{
  console.log('启动服务')
});

日志

npm i -S winston
前端有浏览器
后端的日志可以输出到文件夹 方便运维观察

// util/loggers.js
const {createLogger, format, transports, transport} = require('winston')

const myFormat = format.printf(log =>{
  return `${log.timestamp} ${log.level}:${log.message}`
})

const logger = createLogger({
  level: 'warn',
  format: format.combine(
    format.timestamp({format: 'YYYY-MM_DD HH:mm:ss'}),
    myFormat
  ),
  // 输出日志的地方
  transports: [
    new transports.Console(),
    // 日志文件
    new transports.File({filename: './logs/applog.log'})
  ]
})

export default logger

系统配置

npm i -S cross-env
cross-env可以配置环境变量

通过cross-env在程序启动前设置环境变量PORT
启动时看是否在环境中配置,若配置就用环境中的,否则就使用自定义的
在这里插入图片描述在这里插入图片描述

路由和控制器

把路由单独抽离 动态加载所有路由
在路由中绑定控制器对应的方法

控制器分离业务逻辑

// controllers/user.ctrl.js
// 用户接口 控制器  业务逻辑
const userCtrl = {
  login: function(req, res) {
    res.send('hello')
  }
}
export default userCtrl

// routes/user.route.js
import express from 'express'
const router = express.Router()
import userCtrl from '../controllers/user.ctrl'

export default function(app) {
  router.route('/user/login').get(userCtrl.login)
  router.route('/user/query').get()

  app.use('/api', router)
}
// myexpress.js
  let fs = require('fs')
  let path = require('path')

  // 1.添加路由
  require( process.cwd() + '/app/routes/user.route')(app)
  
  // 2.动态加载路由
  let currentDir = process.cwd()
  let routeDir = currentDir + '/app/routes'
  fs.readdirSync(routeDir).forEach(file =>{
    console.log(file)
    let newPath = path.join(routeDir, file)
    require(newPath)(app)
  })

后端服务分层(还未学完)

前端请求通过路由—>控制层—>服务层—>ORM数据访问层—>数据库
控制层:对参数进行 检查校验 不合格的直接返回
服务层:拿数据进行业务处理、查询、统计
ORM数据访问层/sql:去数据库取数据

数据的访问方式:
ORM—通过js对象的方式访问数据,不需要sql
sql—通过写脚本查询数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值