node實(shí)現(xiàn)上傳文件以及使用centos7+docker部署前端項(xiàng)目

簡(jiǎn)介:

學(xué)習(xí)如何在服務(wù)器端使用node的express輕量級(jí)框架,以及如何使用docker簡(jiǎn)單部署一個(gè)項(xiàng)目
環(huán)境:虛擬機(jī)centos7盏浙,docker。
內(nèi)容:

  1. 學(xué)習(xí)前端如何上傳文件
  2. node如何處理請(qǐng)求,以及expresss中間件的使用
  3. 如何使用docker部署

一.node實(shí)現(xiàn)文件上傳

  1. 首先建一個(gè)空項(xiàng)目,初始化npm init -y
  2. 安裝我們需要的依賴npm i express multer -D
  3. 我們使用express啟動(dòng)一個(gè)服務(wù)器疗杉,并使用multer中間件來(lái)處理上傳的文件。
    根據(jù)multer的官方文檔蚕礼,我使用diskStorage的方式來(lái)處理文件的路徑以及命名
var express = require('express');
const path = require('path')
const multer = require('multer')

var app = express();//創(chuàng)建express實(shí)例

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    console.log(file);
    cb(null, path.join(__dirname,'upload'))
  },
  filename: function (req, file, cb) {
    console.log(file);
    let name = rename(file)
    cb(null,name)
  }
}) 
const upload = multer({ storage: storage })

app.use('/upload',upload.any())
app.post('/upload',(req,res,next)=>{
  res.send(`ok`)
  console.log(req.files);
})
app.listen(3000,()=>{
  console.log('ok');
});

  1. 前端頁(yè)面烟具,以及靜態(tài)資源處理
    a.) 首先我們要?jiǎng)?chuàng)建一個(gè)index.html頁(yè)面來(lái)完成我們上傳文件:
    注意請(qǐng)求方式以及enctype="multipart/form-data"
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="上傳">
    </form>
    
    b.) 使用express提供的靜態(tài)資源處理的中間件express.static():
    這樣我們?cè)L問(wèn)/時(shí)會(huì)自動(dòng)加載index.html
     app.use('/',express.static(path.join(__dirname, "public")));
    

完整代碼:

var express = require('express');
const path = require('path')
const multer = require('multer')

var app = express();//創(chuàng)建express實(shí)例

const storage = multer.diskStorage({
    destination: function (req, file, cb) {
      console.log(file);
      cb(null, path.join(__dirname,'upload'))
    },
    filename: function (req, file, cb) {
      console.log(file);
      let name = rename(file)
      cb(null,name)
    }
}) 
const upload = multer({ storage: storage })

app.use('/',express.static(path.join(__dirname, "public")));

app.use('/upload',upload.any())
app.post('/upload',(req,res,next)=>{
    res.send(`ok`)
    console.log(req.files);
})
app.listen(3000,()=>{
    console.log('ok');
});

function rename(file){
   ...
}

本地運(yùn)行完成后發(fā)現(xiàn)沒問(wèn)題就可以部署到服務(wù)器上了。

二.部署

使用xshell連接到我們的服務(wù)器

  1. 安裝docker
  2. 尋找鏡像:docker sreach node
  3. 安裝我們的運(yùn)行環(huán)境node的鏡像: docker pull node:16.10.0 --這里我選擇的版本是16.10.0是因?yàn)槲抑鳈C(jī)用的也是這個(gè)版本奠蹬,你們可以自行選擇
  4. 創(chuàng)建容器朝聋,并掛載一個(gè)數(shù)據(jù)卷,端口進(jìn)行映射
docker run -it/
 -p 3001:3000 / 
--name=n3 /
-v /home/ys/Public:/root/data-con 
node:16.10.0 /bin/bash
  1. 完成后我們先不急著進(jìn)入到容器罩润,我們先把項(xiàng)目copy過(guò)來(lái)到我們的centos中。使用xftps或者其他方法
    這里我是使用的xftp,復(fù)制到我們掛載的目錄下


    image.png
  2. 運(yùn)行容器docker exec -it n3 /bin/bash : 此時(shí)我們?cè)谌萜髦锌梢赃M(jìn)入到數(shù)據(jù)掛載的目錄下翼馆,并使用node啟動(dòng)它
    image.png
  3. 在我們電腦上訪問(wèn)host:3001就可以訪問(wèn)到了割以。
  4. 上傳文件查看centos目錄下的成功金度!


    image.png

    image.png

如果映射端口失敗,可以重啟docker systemctl restart docker,重新打開容器
三.總結(jié):
項(xiàng)目中還有很多問(wèn)題严沥,時(shí)間有限沒有寫猜极。總的流程就這樣消玄,可以動(dòng)手試一試跟伏。業(yè)務(wù)代碼很簡(jiǎn)單,主要是練手翩瓜。有前端受扳,或者后端一起學(xué)習(xí)的同學(xué)可以一起交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兔跌,一起剝皮案震驚了整個(gè)濱河市勘高,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坟桅,老刑警劉巖华望,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仅乓,居然都是意外死亡赖舟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門夸楣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宾抓,“玉大人,你說(shuō)我怎么就攤上這事裕偿《瓷鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嘿棘,是天一觀的道長(zhǎng)劲腿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鸟妙,這世上最難降的妖魔是什么焦人? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮重父,結(jié)果婚禮上花椭,老公的妹妹穿的比我還像新娘。我一直安慰自己房午,他們只是感情好矿辽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般袋倔。 火紅的嫁衣襯著肌膚如雪雕蔽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天宾娜,我揣著相機(jī)與錄音批狐,去河邊找鬼。 笑死前塔,一個(gè)胖子當(dāng)著我的面吹牛嚣艇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播华弓,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼食零,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了该抒?” 一聲冷哼從身側(cè)響起慌洪,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凑保,沒想到半個(gè)月后冈爹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欧引,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年频伤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芝此。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡憋肖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出婚苹,到底是詐尸還是另有隱情岸更,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布膊升,位于F島的核電站怎炊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏廓译。R本人自食惡果不足惜评肆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望非区。 院中可真熱鬧瓜挽,春花似錦、人聲如沸征绸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至淆衷,卻和暖如春颠放,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吭敢。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暮芭,地道東北人鹿驼。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辕宏,于是被迫代替她去往敵國(guó)和親畜晰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容