node服务:日志、配置、路由与控制器
生活随笔
收集整理的這篇文章主要介紹了
node服务:日志、配置、路由与控制器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- node服務:日志、配置、路由與控制器
- 日志框架winston
- 可配置性
- 路由
- 控制器
node服務:日志、配置、路由與控制器
日志框架winston
- 系統發布上線,出了bug?保存在文件中日志
- 記錄系統運行的日志,包括正常,異常等
- 安裝日志框架:cnpm i -S winston -S保存到package.json文件
- 添加日志框架配置文件app/util/logger.js
- 輸出日志默認json格式, 可以使用format選項配置輸出格式
- 輸出2種方式:控制臺(便于開發調試),文件(發布后調試)
- 新創建日志文件 2個條件:文件達到指定大小 或 按天記錄
logger.js文件:
const {createLogger, format, transports} = require("winston") //記錄日志//自定義日志格式 添加時間 const myFormat = format.printf(log => {return `${log.timestamp} ${log.level}: ${log.message}` })//日志級別: info普通 warn error const logger = createLogger({ //創建日志記錄對象level: "info", //指定輸出日志級別// format: winston.format.simple(), //指定輸出日志格式format: format.combine( //使用組合的方式 給日志加時間format.timestamp(), //時間myFormat),transports: [new transports.Console(), //把日志輸出在控制臺//指定保存的文件 .當前目錄new transports.File({filename: './logs/log.log'})] })export default logger可配置性
- 后端框架需要可配置(系統后端測試環境8081 線上環境8082 改代碼)
- 改配置文件 或 環境變量process.env 可以package.json配置(npm run dev)
- cross-env PORT=4000 設置環境變量為4000
- 文件:config/config.js
路由
- express完整的web框架,有路由(可類比為vue-router),映射到指定的接口地址
- 文件命名: 駝峰,點號分割
- process.cwd() 當前工程目錄 D:\node\2
my.route.js文件:
//路由 import express from 'express' import userCtrl from '../controllers/user.ctrl'const router = express.Router(); //使用express框架自帶的路由 類比vue-routerexport default function(app){//控制器接口--需要路由 接口請求方式(get post)//接口定義請求方式: get post delete put//用戶 路由地址 請求方式 控制器接口router.route('/user/list').get(userCtrl.list);router.route('/user/login').post(userCtrl.login);// /api/user/login//權限//合同//把路由配置在myexpress實例上app.use('/api', router); } //myexpress.js //導入依賴包 import util from 'util' import express from 'express' import bodyParser from 'body-parser' import logger from '../app/util/logger'export default () => {var app = express();// 使用promise方式將app.listen導出到外邊app.listenAsync = util.promisify(app.listen); //node8.x提供的//跨域處理var allowCrossDomain = function (req, res, next) {res.header('Access-Control-Allow-Origin', '*');res.setHeader('Access-Control-Allow-Methods', '*');res.setHeader('Access-Control-Allow-Headers', '*');next();};app.use(allowCrossDomain);logger.warn('配置跨域處理')app.use(bodyParser.json()); //解析前端發送的json數據app.use(bodyParser.urlencoded({extended: true})); //解析前端發表單數據//定義接口 http://localhost:3000/app.get("/", function(req, res){res.send('index') //接口返回字符串})//把user.route.js關聯到app實例上console.log(process.cwd())require(process.cwd() + '/app/routes/my.route.js')(app)// require('../app/routes/my.route.js')(app)logger.warn('配置路由')//啟動服務//app.listen(3000, function(){console.log("Server started on port 3000.")});return app; //返回promise }控制器
- 用戶控制器,權限控制器,合同控制器
- 控制器就是一個接口的細分, 分類
- 給瀏覽器返回數據
res.status(200).send(users)
res.status(200).json(users)
user.ctrl.js文件:
//用戶控制器 操作用戶的接口 import logger from '../util/logger'const operations = {// 用戶登錄接口login: function(req, res){logger.info("調用用戶登錄接口開始"+JSON.stringify(req.body))//......let msg = {msg:"登錄成功"}res.status(200).json(msg)logger.info("調用登錄結束")},// 用戶查詢列表接口list: function(req, res){//req--request res-responselogger.info("調用用戶查詢接口")let users = [{name:"小張"}, {name:"小王"}]//給瀏覽器返回數據// res.status(200).send(users)res.status(200).json(users)logger.info("調用用戶查詢接口結束")} }export default operations
總結
以上是生活随笔為你收集整理的node服务:日志、配置、路由与控制器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node入门-学习笔记
- 下一篇: node:ORM、数据模型、脚本创建模型