1. 程式人生 > 實用技巧 >airflow分散式部署(一)Python環境

airflow分散式部署(一)Python環境

cnpm install express-generator -g ;express框架生成器(腳手架)

express --view=ejs e-app ;生成ejs模板語法

SET DEBUG=e-app:* & npm start ; 執行生成的專案

express -v ;檢視express版本

npm install express

npm install body-parser 獲取post引數使用

npm install art-template express-art-template 獲取模板引擎

引數|send

send對比end

  1. send方法內部會檢測響應內容的型別(可以send物件)

  2. send方法會自動設定http狀態碼

  3. send方法會自動設定響應的內容型別及編碼(自動設定utf8)

//引入express框架,post引數模組
const express =require('express')
const bodyParser = require('body-parser')
//建立網站伺服器
const app = express();
//使用req.body獲取post引數新增
app.use(bodyParser.urlencoded({extended:false}))
//載入靜態頁面
app.use(express.static(public的路徑)
app.get('/',(req,res)=>{
//使用req.query獲取GET引數、同樣使用req.params獲取id等屬性
console.log(req.query);
res.send({name:'張三',age:20})
})
app.post('/add',(req,res)=>{
//使用req.body獲取POST引數
console.log(req.body);
res.send('使用post方式獲取了路由')
})
app.listen(3000)

路由

const express = require('express')
//使用express.Router()方法註冊路由
const home = express.Router()
home.get('/',(req,res)=>{
res.send('請求首頁成功')
})
module.exports = home
//app.js中的使用
const express = require('express')
const app = express()

const home = require('./router/home')
const admin = require('./router/admin')
app.use('/home',home)
app.use('/admin',admin)

app.listen(80)

中介軟體

app.user

//所有地址都會經過的中介軟體
app.use((req,res,next)=>{
console.log(req.url);
next()
})
app.use('/request',(req,res,next)=>{
console.log('客戶端訪問request執行該中介軟體');
next()
})

使用場景

開始:登入攔截|維護通知|錯誤處理

結束:頁面404

注意店:try-catch處理錯誤只能處理同步和非同步程式碼,不能處理promise和回撥

app.use((req,res,next)=>{
res.send('頁面維護中')
})
app.use('/admin',(req,res,next)=>{
const pass = true
res.send(pass?'登入成功':'失敗')
})
app.use((req,res,next)=>{
res.send('找不到您要的也買你')
})
//錯誤處理中間鍵
app.use((err,req,res,next)=>{
res.status(500).send(err.message)
})
//在函式中自己丟擲錯誤
app.get('/index',(req,res,next)=>{
fs.readFile('檔案',(err,res)=>{
if(err!=null){
next(err)
}
})
})

模板引擎

npm install art-template express-art-template 獲取模板引擎

  1. 模板中檔案的路徑是相對於當前訪問的路由[admin/login中的admin],所以要麼就需要將路由名字與靜態資源名字保持一致,要麼將模板中的路徑設定為絕對路徑

//引入express框架
const express =require('express')
const path = require('path')
const app = express();
//當渲染檔案字尾為art時 使用express-art-template模板
app.engine('art',require('express-art-template'))
//設定模板存放目錄,第一個引數固定
app.set('views',path.join(__dirname,'views'));
//設定預設拼接art字尾
app.set('view engine','art');
app.get('/index',(req,res)=>{
//render將會拼接模板路徑與字尾
//哪一個模板和資料經行拼接
//將拼接結果響應給客戶端
res.render('index',{
msg:'message'
})
})
app.listen(3000)
console.log('伺服器請求成功');

公共資料

app.locals用於設定原型資料

在每個req中同樣也有app.locals屬性

module.exports = (req, res) => {

// 標識 標識當前訪問的是文章管理頁面
req.app.locals.currentLink = 'article';

res.render('admin/article-edit.art');
}