日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

node服务:日志、配置、路由与控制器

發布時間:2024/1/23 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
//配置文件config/config.jsconst config = {//配置環境變量 若有環境變量則使用 否則使用默認的port: process.env.PORT || 3000 }export default config //package.json {"name": "0","version": "1.0.0","description": "","main": "express-run.js","scripts": {"start": "cross-env PORT=4000 babel-node main.js","dev": "babel-node main.js"},"keywords": [],"author": "","license": "ISC","dependencies": {"babel-cli": "^6.26.0","babel-node": "^0.0.1-security","babel-plugin-add-module-exports": "^1.0.2","babel-preset-env": "^1.7.0","body-parser": "^1.19.0","cross-env": "^7.0.2","express": "^4.17.1","winston": "^3.3.2"} } //main.js import express from './config/myexpress' import logger from './app/util/logger' import config from './config/config'const server = express(); //server.listenAsync ==== promise //配置文件處理---取端口號---port // const port = 3000; server.listenAsync(config.port).then(()=>{logger.info("Server started on port "+config.port) //日志 不會被記錄到文件 })

路由

  • 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服务:日志、配置、路由与控制器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。