nodejs web開發入門: Simple-TODO Nodejs 實現版
代碼目錄目錄還是很清晰的, public存放靜態文件, views存放模版, controllers處理業務邏輯,還有配置config.js, web主入口server.js
使用到的第三方nodejs模塊
這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方式 如添加一條todo記錄: HTTP GET /new, 將由todo.new方法處理,代碼邏輯包括了title參數有效性驗證, 數據保存到資料庫, http redirect: 更多的controller處理邏輯請查看/controllers/todo.js.資料庫初始化及啟動Web進程 有愛可以看到, 無論是python的web開發, 還是nodejs, 我們以前對web的概念還是無需改變的.都是我們熟悉的一些關鍵詞:http, request, response, html, template engine, url routing, MVC, GET, POST, MYSQL, Database…不同的是, 這裡只使用javascript就可以驅動著以上的一切.希望本文對你有用 ^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);
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(『/』); });};
$ mysql xxx$ source ~/todo/todo.sql$ node server.js
推薦閱讀:
※如何進行nodejs非同步編程?
※想學習nodejs 有什麼書可以推薦的?
※應該使用 const 定義 object 和 array 嗎?
※js中Async/Await 怎麼做錯誤處理更好?