此為練習 Vuex 時所用咖啡api,用node.js佈屬時的筆記。

建立寫死的假API
假api有幾種產生方式,例如用本地端api server來處理,而其中一種是真的佈屬上雲端,本地端取用,建立api使用node.js來處理,這裡用到了express
(其實可以不用express,但我這裡就是用了啦)

首先建立專案,之後建立package json,在終端機輸入

npm init

專案名稱打好後,是需求填入資訊或Enter到底即可。

安裝express

sudo npm install express --save

安裝node的跨域模組

sudo npm install cors

接著編輯器或IDE打開專案,建立index.js或app.js,我這裡建立index.js(取何種名稱沒差)
檔案內容如下

//require載入express模組
var express = require('express');

//再用個變數app去(接)載入express模組的全部功能、函式
var app = express();

//載入node替跨域寫的cors跨域模組(要sudo install此模組後才能載入)
var cors = require('cors’);

//使用此跨域模組 預設是*無限制
app.use(cors())

//根目錄的內容(根目錄的json)
app.get('/',function(req,res){
    res.json(JSON陣列物件放在這裡);
})

app.use(function(req,res,next){
res.status(404).send('<html><head></head><body><h1>404找不到!</h1></body></html>')
})


//監聽port
var port = process.env.PORT || 3000;
app.listen(port)

cors跨域是前端接資料常遇到的問題,node有提供一個處理跨域的模組cors
https://github.com/expressjs/cors
讓我們可以很簡單的設置跨域權限
所以要require和use它

主要的重點是路由對應顯示何種檔案,要讓首頁或特定路由的內容是json要用

res.json(JSON陣列物件放在這裡);

以上面範例來講就是這樣

res.json
(
[
  {
    name:"巴西精選深焙",
    price: 290,
    img: "https://cache2.allpostersimages.com/LRG//68/6826/Q67Y100Z.jpg",
    amount: 0,
    amountShow: 1
  },
  {
    name:"嚴選法式烘焙",
    price: 320,
    img: "https://esimg.eworldtrade.com/uploads/industry/thumb/cocoabeans.jpg",
    amount: 0,
    amountShow: 1
  },
  {
    name:"東非職人摩卡",
    price: 300,
    img: "http://www.deecafe.in/extra/b1.jpg",
    amount: 0,
    amountShow: 1
  },
  {
    name:"坦尚尼亞A級",
    price:280,
 img:"https://shoplineimg.com/566ee049e36c8e86ac000043/56b1b66069702d0c33460d00/400x.jpg",
    amount: 0,
    amountShow: 1
  },
  {
    name:"黃金曼特寧",
    price:340,
    img:"https://www.valpak.com/img/bpp/organic-coffee-organo-goldcolumbu_BPP_59087_2.jpg",
    amount: 0,
    amountShow: 1
  },
  {
    name:"肯亞耶加雪菲",
    price:430,
    img:"https://cache2.allpostersimages.com/LRG//26/2633/GLEMD00Z.jpg",
    amount: 0,
    amountShow: 1
  }
]
);

終端機輸入node index.js 再到對應的路由/
就會看到json囉!

如果不想json在根目錄出現,路由也可以自己修改,總之就app.get(‘/其他路由名稱',function(req,res){
res.json(JSON陣列物件放在這裡);
})
在app.get修改路由名稱就好

部署到Heroku上
首先到heroku辦帳號密碼

接著選程式語言node > 文檔 > 開始使用
(英文看不懂?右鍵翻譯啊!)

下載Heroku Cli並安裝
下載Heroku Cli並安裝這棟只需一次,如果安裝過的人就不用在下載安裝了

安裝好後打開終端機,輸入

heroku login

接著終端機輸入Heroku帳號密碼後即可

再來終端機cd到要推上去的專案目錄資料夾

因為需要用git把專案推到heroku,
先檢查有沒有git本地數據庫,有就略過此步驟,沒有就

git init

然後就

git add .
git commit -m '這裡放你的commit訊息'

接著是重要步驟(?)輸入

heroku create

heroku就會產生一個專案,專案名稱會隨機取名
規格為形容詞+名詞+數字,比如”desolate-refuge-11720”
此時自己在heroku官網的dashboard儀表板也會跟著產生該專案

我們當然可以改名字啦,進入官網該專案後台改完名字後,要記得同步更新本地端的git資訊,否則之後會push不上去

這裡我改名成fake-coffee-api,此時回到終端機,上個終端機指令是heroku create
這裡終端機要輸入

git remote rm heroku
heroku git:remote -a newname 

newname是我們改過的名字,所以我是輸入

heroku git:remote -a fake-coffee-api

接著就可以推上去囉

git push heroku master

然後就可以去heroku的專案檢查囉,輸入該專案的網址後就會發現

?????

這是因為
heroku並不知道我們推上去的專案,它要啟用哪個檔案開始

所以回到專案package.json,新增

"engines":{
    "node":”8.10.0"
}

意思是heroku會用何種程式打開它

接著新增

"scripts": {
    "start":"node index.js”
}

意思是heroku開始要下什麼指令,我們進入點是index.js
之後執行heroku幫我們執行node index.js運行專案
如果進入點檔案名字是取app.js,那這裡就改成node app.js

接著一樣git add、commit、push推上去

這次就成功囉