nodejs web開發入門: Simple-TODO Nodejs 實現版

起因看到simple todo的各種python版本實現, 我也來湊湊熱鬧…既然已經有這麼多python版本了, 我就對比實現了一個Simple-TODO的nodejs版本:Node TODO, 模版和樣式全部copy自web.py版本.Source Code && Demo

  • 源代碼:https://github.com/fengmk2/todo
  • 在線demo:http://api.yongwo.de:3888
  • 代碼目錄目錄還是很清晰的, public存放靜態文件, views存放模版, controllers處理業務邏輯,還有配置config.js, web主入口server.js

    使用到的第三方nodejs模塊

  • express: Web框架, 目前nodejs使用最廣泛的web框架
  • ejs: 模版渲染引擎, 用於生成動態內容
  • node-mysql: 純javascript實現的mysql驅動, 無法安裝任何mysql包依賴.
  • 這3個模塊都可以直接通過npm安裝獲得:

    $ npm install express ejs mysql

    開發過程記錄config.js可配置的信息:* 網站名稱* 監聽埠號, 默認8080* 資料庫配置信息如何訪問資料庫在config.js文件裡面, 會使用一下方式保持著資料庫的鏈接對象

    var db = exports.db = new require(『mysql』).Client(db_options);db.connect(function(err) { if(err) { console.error("connect db " + db.host + " error: " + err); process.exit(); }});

    這樣我們就可以在別的地方直接使用db對象了server.jsexpress可以幫我們默認實現了靜態文件處理, cookie處理, 請求參數處理等事情, 只需要配置一下, 就可以使用上這些功能了.

    var app = express.createServer();app.use(express.static(__dirname + "/public』, {maxAge: 3600000 * 24 * 30}));app.use(express.cookieParser());app.use(express.bodyParser());

    同樣, 需要配置模版渲染引擎為ejs

    app.set("view engine", 「html」);app.set("views", _dirname + 『/views』);app.register("html", ejs);

    看看views/index.html裡面的一個最複雜的模版例子,ejs最讓我喜歡的是不用再學一套語法, 直接是內嵌js, 還是很容易讀懂的

    URL Routing與Controllers一個http請求過來, 由那個controller處理, express提供了簡便的routing方式

    app.get("/』, todo.index);app.post("/todo/new』, todo.new);app.get("/todo/:id』, todo.view);app.get("/todo/:id/edit』, todo.edit);app.post("/todo/:id/edit』, todo.save);app.get("/todo/:id/delete』, todo.delete);app.get("/todo/:id/finish』, todo.finish);

    如添加一條todo記錄: HTTP GET /new, 將由todo.new方法處理,代碼邏輯包括了title參數有效性驗證, 數據保存到資料庫, http redirect:

    exports.new = function(req, res, next) { var title = req.body.title || "』; title = title.trim(); if(!title) { return res.render("error』, {message: "標題是必須的』}); } db.query("insert into todo set title=?, post_date=now()", [title], function(err, result) { if(err) return next(err); res.redirect(『/』); });};

    更多的controller處理邏輯請查看/controllers/todo.js.資料庫初始化及啟動Web進程

    $ mysql xxx$ source ~/todo/todo.sql$ node server.js

    有愛可以看到, 無論是python的web開發, 還是nodejs, 我們以前對web的概念還是無需改變的.都是我們熟悉的一些關鍵詞:http, request, response, html, template engine, url routing, MVC, GET, POST, MYSQL, Database…不同的是, 這裡只使用javascript就可以驅動著以上的一切.希望本文對你有用 ^^
    推薦閱讀:

    如何進行nodejs非同步編程?
    想學習nodejs 有什麼書可以推薦的?
    應該使用 const 定義 object 和 array 嗎?
    js中Async/Await 怎麼做錯誤處理更好?

    TAG:Nodejs | nodej | 實現 | 入門 |