Github 參考 接著我們要根據我們開之前寫好的 文件 來開發: 要有下列 routes TODOs GET /user/{user_id}/todos/ POST /user/{user_id}/todos/ GET /user/{user_id}/todos/{id} PUT /user/{user_id}/todos/{id} DELETE /user/{user_id}/todos/{id} 這樣的需求其實可以用 namespace 實作,不過我們偷懶一點,直接指向 /user 就好 所以在 app.js 加入 var users = require('./routes/users'); app.use('/user', users); 所以會變這樣: var express = require('express'); var app = express(); // Set routers var index = require('./routes/index'); var users = require('./routes/users'); app.use('/', index); app.use('/user', users); module.exports = app; 不過看起來我們缺少 routes/users.js,所以我們也來新增一個 routes/users.js 內容如下 'use strict'; var express = require('express'); var router = express.

Continue reading

Github 參考 昨天先把專案目錄初始化,裝完該裝的套件後 在 routes 中加入一個 index.js 檔案 'use strict'; var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.status(200).json({ greetings: "hello world!"}); }); module.exports = router; 建立一個 app.js 在專案根目錄中: app.js var express = require('express'); var app = express(); var index = require('./routes/index'); // Set routers app.use('/', index); module.exports = app; 然後在 bin 資料夾建立一個 server.js: bin/server.js: 'use strict'; var debug = require('debug')('TODOAPI'); var app = require('.

Continue reading

會使用到的套件: 主體: express - web framework body-parser - parse request body 測試相關: mocha - test framework mocha-mongoose - 用來和 mocha 和 mongoose 中間做介接的套件 superagent - 拿它來丟 http request validator - 用來驗證某個物件是否為某個型別 expect.js - 類似 BDD 的語法,用來寫測試的 debug - debug package DB 相關: mongoose - mongodb orm mongodb - mongodb native driver 開發相關: nodemon - detect file change and restart server 生產環境相關: log4js - 記錄 request log 這是我的 package.json, 可以複製到專案目錄,然後下 npm install

Continue reading

首先我們就在虛擬機的資料夾底下,建立一個專案資料夾吧! 今天會來簡單切割一下我們的專案目錄 建立新專案目錄: $ cd /vagrant/ $ mkdir TODOAPI $ cd TODOAPI $ npm init // 輸入專案資訊 $ 建立專案結構 / | - bin/ | - routes/ | - model/ | - node_modules/ | - logs/ | - config/ | - test/ | - app.js | - package.json 分別講解一下各個 folder 的工作: bin 筆者會在 bin 資料夾底下放一個 server.js 這個 server.js 就是會專門用來啟動一個 app.js instance routes 基本上如果了解 MVC 架構的話,routes 就是 controller 的意思,其實如果讀者本身夠了解的話,這個資料夾也可以改成 controller 也 ok,應該說,其實資料夾怎麼放都是看個人隨意即可,只是若是要模組化的話,筆者會這樣來處理一個專案結構。

Continue reading

接下來我們想要做到的是一個 TODO list 的 RESTful API 並且會先使用 apiary.io 做規劃 實際看看感覺如何 進入網站後,註冊登入後 左上角的 dropdown list 選擇 create new API 產生後下方就會跑出範例文擋 這個網站會透過特定格式的編排自己希望的 API endpoint 及範例回傳值後,產生出一份漂亮的文件 網站中間是模式的選擇 Documentation 是實際讓其他人看的,Editor 則是編輯模式 我們就稍微簡單規劃一下 TODO List 的 RESTful API 吧! 這是我自己規劃的 文件 基本上 route 會長這個樣子: TODOs GET /user/{user_id}/todos/ POST /user/{user_id}/todos/ GET /user/{user_id}/todos/{id} PUT /user/{user_id}/todos/{id} DELETE /user/{user_id}/todos/{id} 資料格式也都在該文件整理好了 /user/{user_id}/ 只是用來辨識是哪個 user 的 todo task data 在這個小 API 不會琢磨在使用者系統的建立,只會專注在操作 todo task data 我們可以直接透過 PostMan 來丟丟看 我們設定必須要使用 API-key 才能存取 API,比較進階的做法就是使用 Oauth 的方式取得 token 來存取 API

Continue reading

這幾天會探討 javascript 的特性,由於比較少在寫 js ,因此有錯請指正 javascript 有個特性:event 意思就是說,javascript 中,所有的事情都是由事件驅動的 如果說有寫過 web 前端的話, 其實呼叫 button.click function 時 並不會馬上執行 click 裡面的動作 而是加了一個 click 的 listener 等到 button 被 click 後,才會執行 click 裡面的程式碼 所以寫習慣一般 procedure 的程式會有點不太習慣 舉個 procedure 的例子,下面有五件事想要做: 煮飯(); // 10 分鐘 接電話(); // 1 分鐘 吃麵(); // 5 分鐘 丟垃圾(); // 7 分鐘 一般的程式會是照順序執行 也就是 煮飯完 -> 接電話 -> 吃麵 -> 丟垃圾 總執行時間 = 23 分鐘 但是如果把這段 code 丟給 javascript 執行的話

Continue reading

這幾天會探討 javascript 的特性,由於比較少在寫 js ,因此有錯請指正 Scope 例子: function hi() { var greetings = "hi"; console.log("Say: " + greetings); function sayYa(newInput) { greetings = newInput; console.log("Say: " + greetings); } function sayCool(newInput) { var cool = newInput; console.log("Say: " + cool); } sayYa("Yo"); sayCool("Cool"); console.log("Say: " + greetings); } hi(); 很簡單的概念 greetins 在 sayYa 方法中被覆寫掉了 如果要定義 local 變數必須在 function 裏用 var 定義 例如 sayCool function Closure 例子: function person(){ var name = 'default'; return { greetings: function() { console.

Continue reading

接下來幾天會探討 node.js 的特性,由於比較少在寫 js ,因此有錯請指正 在 node.js 裏,要讀取外部模組都是透過 require 和 exports 來做溝通 以下列出這次最簡單 module 的例子 //hello.js console.log('Hello World'); // app.js require('./hello.js'); Module 也是有 Pattern 的 第一種: Global (Not so good) // foo.js foo = function() { console.log("foo!"); } // app.js require('./foo.js'); foo(); 第二種: export an anonymous function // foo.js module.exports = function() { console.log("foo! YA"); }; // app.js var test = require("./foo.js"); test(); 第三種: export a named function

Continue reading

今天要使用 Node.js 的 mongodb driver 來操作 DB 一樣先開啟虛擬機並且登入吧 會使用到的套件是: mongodb -> mongodb native driver 或許有人有看過 mongoose -> 官網 算是 MongoDB 的 ORM,我們在這邊如果有時間的話再簡單了解一下, 現在先使用 native driver 來操作 我們在這邊就不裝全域套件了,裝在 API 專案裡面 並且使用 -save 來將相依性寫入 package.json 裏 $ cd /vagrant/API/ $ npm install mongodb -save 從虛擬機回到電腦的資料夾中,在虛擬機資料夾的 API 資料夾中, 今天我們先不和 express 搭配,因此就是純操作 node.js + mongodb module 新增一個 mongoTest.js 我們先來連線到 MongoDB,連線的方式有很多,下面是其中一種方式, // 先宣告用的到的東西 var MongoClient = require('mongodb').MongoClient , Server = require('mongodb').Server , options = { auto_reconnection: true, poolSize: 10 }; // Server 設定 var mongoClient = new MongoClient(new Server('localhost', 27017, options)); // 開啟連線 mongoClient.

Continue reading

今天先講在 Server 中如何操作 MongoDB 一樣開啟虛擬機, 我們在先前已經有先安裝過 MongoDB 了,因此,在 Ubuntu Server 中預設是開機啟動的 登入虛擬機吧~ 登入虛擬機後,我們要進入 MongoDB,必須使用 mongo 這個 MongoDB Shell $ mongo MongoDB shell version: 2.6.4 connecting to: test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user > 此時會發現輸入指令的地方變成了 > 表示我們已經在 mongodb 裡面了 為什麼不需要帳號密碼即可進入 MongoDB 呢,因為 MongoDB 預設是不需要做登入的 並且加上預設只能由本機存取,也就是說,外部連入的 IP 是進不了 MongoDB 的 這部分後面會再作說明。 傳統的 Table 在 MongoDB 中,稱之為 Collection

Continue reading

Author's picture

kerkerj

Cat lover <3

Backend Engineer

Taiwan