00#前言
學習JavaScript,自然要用node js 搭一個后臺來
順便可以學習MVC思想
nodejs也僅是剛剛hello world的水平,能在服務器上展示一下自己的學習成果,以后再慢慢補充
確保Node版本正確
node -v,npm -v
目前我使用的是7.8.0 ,npm是4.2.0
基礎
Node引入模塊需要require語句,如
const Koa = require('koa');
依次在內置模塊、全局模塊和當前模塊下查找
除了一些內置模塊,我們可以自己寫一些.js
結尾的文件,對外輸出
module.exports = variable;
自己理解的網頁請求過程
在服務器端部署好我們的代碼,監聽在一個端口,等待請求
const Koa = require('koa'); /引入koa const app = new Koa(); /創建實例(可以理解為從koa繼承了方法過來?并且命名為app) const controller = require('./controller'); /引入 app.use(controller()); /使用controller模塊 app.listen(8080); /監聽在8080
瀏覽器發起一次請求,帶上了自己的方法
在F12控制臺可以看到
服務器收到請求
MVC中的C,controller開始判斷請求方法(Method)和后面的url
比如GET /
POST /signin
假設我們直接輸入了127.0.0.1:8080
那么就是 GET /
方法
我們早已寫好的一個模塊方法,就可以登場了
module.exports = { 'GET /': async (ctx, next) => { ctx.render('index.html'); } };
這個函數的意思是,如果開頭是GET,并且url為/的請求
會去尋找并返回 index.html
首頁去哪里找呢?
那就是MVC里的view啦,在項目中是views文件夾
當然,為什么app知道要去views文件夾找,也是我們事前寫進來的
const templating = require('./templating'); app.use(templating('views', { noCache: !isProduction, watch: !isProduction }));
當然,templating又是引入的一個js模塊,里面有函數去讀取views文件夾里的所有文件,并且綁定了ctx的render方法
這樣,找到了index.html,帶上了自己的type,返回給瀏覽器
ctx.response.type = 'text/html';
更多細節暫且不提,流程先搞懂,MVC中的model我也還沒有用到,以后再補充。
將項目用git上傳至倉庫
首先新建一個倉庫,空白的就可以,一步步走下去,就可以把我們的項目一起上傳至git倉庫
echo "# xxxxxx" >> README.md git init git add . git commit -m "first commit" git remote add origin git@github.com:yang-xxxxxxx/xxxxx.git git push -u origin master
在服務器中用git clone命令把倉庫拉下來
用ngnix簡單部署
1.安裝pm2管理進程
sudo npm install -g pm2
pm2,不是污染哈哈,英文應該是
process manager for Node.js applications
他會將我們的進程在后臺自動運行
2.開始在后臺運行我們的項目
pm2 start app.js
3.設置開機自動運行
pm2 startup systemd
有可能會出現一些提示,讓我們用sudo 命令
sudo su -c "env PATH=$PATH:/usr/bin pm2 startup systemd -u sammy --hp /home/sammy"
替換掉其中的sammy等個人名稱
4.檢查一下情況~
pm2 show app pm2 list systemctl status pm2
5.如果之后有更新,記得用pm2重啟app
pm2 restart app_name_or_id
6.安裝ngnix并配置
sudo apt-get install nginx
然后
sudo nano /etc/nginx/sites-available/default
也可以用 vim ,vi 等等命令~
刪除全部文件,然后替換
server { listen 80; server_name example.com(替換掉); location / { proxy_pass http://localhost:8080(端口對應好); proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
7.檢查一下是否有語法錯誤
sudo nginx -t
8.沒有就啟動吧!
sudo systemctl restart nginx
可能有防火墻,所以多加一條允許Nginx通過Firewall
sudo ufw allow 'Nginx Full'
成功!
具體koa的代碼,大家可以看了廖雪峰老師的教程
百度關于部署這一步的教程不是很多,不夠清晰
還是推薦谷歌,等我學好js,再來補充更多內容。