摘要:迅速發展,目前最熱的構建框架非莫屬,在上有的就可以證明。下面就以為中心構建一個前后端都包含在內的簡單吧。簡單的能讓你迅速地了解到工作流程。創建并初始化項目首先,進入到你的工作目錄新建一個項目目錄并打開通過命令為你的項目創建一個文件。
Nodejs迅速發展,目前最熱的Nodejs構建框架非express莫屬,在Github上有32k的star就可以證明。下面就以Nodejs為中心構建一個前后端都包含在內的簡單demo吧。
不管開發什么項目,有了腳手架之后不管對于理解還是開發都會變得容易。簡單的demo能讓你迅速地了解到工作流程。廢話不多說,開始構建吧!
1、安裝和配置環境
1.1、 安裝Node.js與NPM
Windows下安裝 Node.js 還是比較方便的,請自行下載并安裝, 安裝包及源碼下載地址為: https://nodejs.org/en/download/ 。安裝過程傻瓜式一直‘NEXT’就可以。安裝完成后打開命令行輸入node -v返回相應的版本號說明環境變量配置成功了。
NPM 是隨同 Node.js 一起安裝的包管理器,新版的 Node.js 已經集成了 npm ,所以NPM也一并安裝好了。
1.2、創建并初始化項目
首先,進入到你的工作目錄新建一個項目目錄并打開
D:WWW>mkdir nodejs-express-mysql-jade && cd nodejs-express-mysql-jade
通過 npm init 命令為你的項目創建一個 package.json 文件。
D:WWW odejs-express-mysql-jade>npm init
該命令會要求你輸入一些參數,包括應用名、版本等,可以直接按回車設置為默認值。需要注意的是,其中有一項為 entry point: ,它的值為項目的入口文件,你可以設置成你想要的名稱,例如 app.js 或者 index.js 等,在這兒我就默認選擇了 app.js 。
1.3、安裝express和應用生成器express-generator
通過npm直接安裝生成器express-generator
npm install express express-generator -g
然后使用express [name]或者直接express命令構建一個項目;name是你輸入的文件名,不填就在當前目錄構建。
express
構建完成后的目錄結構:
然后安裝所有的依賴包,如果你寫了上面的[name],那么進入到[name]下目錄后運行npm install,如果沒有寫名字,在當前目錄直接運行npm install。
npm install
1.4、運行項目
運行命令
set DEBUG=myapp & npm start
然后在瀏覽器中打開 http://localhost:3000/ 網址就可以看到這個應用了。
當然每次更新代碼都要重執行一次命令顯得效率低,安裝nodemon
npm install nodemon -g
修改package.json:
"scripts": { "start": "set DEBUG=myapp & nodemon ./bin/www" },
之后每次只要更新了文件,服務器都會自動更新并啟動了,直接去頁面刷新即可。
到這里第一步的構建工作已經結束了。
2、連接后臺
2.1、安裝mysql并連接數據庫
npm install mysql -g
安裝包之后在項目根目錄下新建兩個目錄如下圖紅色框所示
在本地建一個數據庫user,并建一張user表,然后加入三個字段id、name、age;
其中conf.js:
// MySQL數據庫聯接配置 module.exports = { mysql: { host: "localhost", user: "root", password: "", database:"user", // 前面建的user表位于這個數據庫中 port: 3306 } };
userSqlMapping.js:
var user = { insert:"INSERT INTO user(name, age) VALUES(? , ?)", update:"UPDATE user SET name = ?, age = ? WHERE id = ?", delete: "DELETE FROM user WHERE id=?", queryById: "SELECT * FROM user WHERE id=?", queryAll: "SELECT * FROM user" }; module.exports = user;
userDao.js:
// 實現與MySQL交互 var mysql = require("mysql"); var $conf = require("../conf/conf"); // var $util = require("../util/util"); var $sql = require("./userSqlMapping"); // 使用連接池,提升性能 var pool = mysql.createPool( $conf.mysql ); // 向前臺返回JSON方法的簡單封裝 var jsonWrite = function (res, ret) { if(typeof ret === "undefined") { res.json({ code:"1", msg: "操作失敗" }); } else { res.json(ret); } }; module.exports = { add: function (req, res, next) { pool.getConnection(function(err, connection) { // 獲取前臺頁面傳過來的參數 var param = req.query || req.params; // 建立連接,向表中插入值 // "INSERT INTO user(id, name, age) VALUES(0,?,?)", connection.query($sql.insert, [param.name, param.age], function(err, result) { if(result) { result = { code: 200, msg:"增加成功" }; } // 以json形式,把操作結果返回給前臺頁面 jsonWrite(res, result); // 釋放連接 connection.release(); }); }); }, delete: function (req, res, next) { // delete by Id pool.getConnection(function(err, connection) { console.log(req.query.id); var id = +req.query.id; connection.query($sql.delete, id, function(err, result) { if(result.affectedRows > 0) { jsonWrite(res, result); result = { code: 200, msg:"刪除成功" }; } else { result = void 0; } jsonWrite(res, result); connection.release(); }); }); }, updateUser: function (req, res, next) { var param = req.body; console.log(param); if(param.name == null || param.age == null) { jsonWrite(res, undefined); return; } pool.getConnection(function(err, connection) { connection.query($sql.update, [param.name, param.age, param.id], function(err, result) { // 使用頁面進行跳轉提示 // if(result.affectedRows) { // res.render("suc",{ // title:"成功頁", // result: result // }); // 第二個參數可以直接在jade中使用 // } else { // res.render("fail", { // result: result // }); // } jsonWrite(res, result); connection.release(); }); }); }, queryById: function (req, res, next) { var id = +req.query.id; // 為了拼湊正確的sql語句,這里要轉下整數 pool.getConnection(function(err, connection) { connection.query($sql.queryById, id, function(err, result) { jsonWrite(res, result); connection.release(); }); }); }, queryAll: function (req, res, next) { pool.getConnection(function(err, connection) { connection.query($sql.queryAll, function(err, result) { // jsonWrite(res, result); res.render("list",{ title:"列表頁", result:result }); connection.release(); }); }); } };
2.2、更新路由
編輯routes/users.js
var express = require("express"); var router = express.Router(); var userDao = require("../dao/userDao"); /* GET users listing. */ router.get("/", function(req, res, next) { res.send("respond with a resource"); }); // 增加用戶 router.get("/addUser", function(req, res, next) { userDao.add(req, res, next); }); router.get("/addUserMiddle", function(req, res, next) { res.render("addUser",{ title:"添加用戶頁" }); }); //查看全部用戶 router.get("/queryAll", function(req, res, next) { userDao.queryAll(req, res, next); }); //查詢指定用戶 router.get("/query", function(req, res, next) { userDao.queryById(req, res, next); }); //刪除用戶 router.get("/deleteUser", function(req, res, next) { userDao.delete(req, res, next); }); //更新用戶信息 router.post("/updateUser", function(req, res, next) { userDao.updateUser(req, res, next); }); module.exports = router;
2.3、安裝bootstrap添加對應的視圖文件
安裝bootstrap先安裝bower
npm install bower -g
安裝完了bower之后,編輯.bowerrc文件。能夠把下載的包放在對應的位置上:
{ "directory" : "public/libs" }
安裝bootstrap包:
bower install bootstrap
不過最近bower好像一直在維護,這樣的話就用npm安裝bootstrap和jquery包了。
npm install bootstrap@3 --save
npm install jquery --save
安裝完了之后,因為沒用webpack,包模塊管理起來沒那么方便。所以就用gulp直接把包拉到資源目錄public下
npm install gulp -g
在跟package.json同目錄下建一個gulpfile.js文件,輸入以下代碼:
var gulp = require("gulp"); gulp.task("moveJquery" , function(){ return gulp.src("node_modules/jquery/*/*") .pipe(gulp.dest("public/libs/jquery")); }); gulp.task("moveBootstrap" ,["moveJquery"] , function(){ return gulp.src("node_modules/bootstrap/*/*/*") .pipe(gulp.dest("public/libs/bootstrap/")); });
在命令行輸入:
gulp moveBootstrap
這樣就把node_modules下的包拉到了public/libs下了
最后在layout.jade上引入相應的文件:
doctype html html head title #{title} link(rel="stylesheet", href="/libs/bootstrap/dist/css/bootstrap.min.css") script(src="/libs/jquery/dist/jquery.min.js") script(src="/libs/bootstrap/dist/js/bootstrap.min.js") body block content
其他的視圖就不在這里一一列舉了。
完成全部工作之后,在瀏覽器上輸入localhost:3000/users/queryAll就可以完成如下圖所示的所有操作啦。
運行結果圖:
添加用戶:
編輯用戶信息:
用戶信息列表:
過濾用戶信息,這里只簡單地寫了根據id過濾,這里不重點講這個:
講到這里,就已經講完了。對于剛接觸Nodejs的童鞋來說,這是個蠻不錯的demo。
下次繼續完善前端工具方面的內容。webpack配置熱更新等等。。。這樣在更新完你的代碼之后直接去頁面就可以看到效果了,連F5都不用按,這些細節會大大地提高開發效率。
項目地址:Demo,只想了解流程又不想構建的童鞋直接clone到本地哦。對你有丁點的幫助請給個star哈!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83160.html
摘要:后天開題答辯了,報告沒整完做,答完再繼續做。預祝大家游戲玩的開心,代碼寫的順心。先把這第一版放出來,小弟初學此道,還請大家批評指正如果文中有對廣州網易計算機系統有限公司侵權的行為,請聯系我,立馬刪文。 夢幻西游手游煉藥信息采集系統 一、初衷 本文不是軟文!!!本文不是軟文!!!本文不是軟文!!!文章開始重要的事情說三遍!!!初中時玩一款網易的游戲叫《夢幻西游》,前兩天看朋友在玩《夢幻西...
摘要:博主目前的這個項目還不算很大,模塊依賴簡單,但期望完成諸如版本號替換,壓縮代碼,合并文件,發布到服務器等和模塊化關系不大的工作,所以使用了。同時,對和附加緩存,配合和版本號實現服務器更新,這一部分其實已經幫我們實現好了。 經常在各種論壇、博客還有 github 上活躍的朋友不難發現,許多大牛都有自己的網站,也多以博客為主。博主作為一個立志前端的大白,難道不應該和大牛學習么?說干就干,前...
閱讀 2690·2021-11-08 13:16
閱讀 2367·2021-10-18 13:30
閱讀 2237·2021-09-27 13:35
閱讀 1993·2019-08-30 15:55
閱讀 2442·2019-08-30 13:22
閱讀 576·2019-08-30 11:24
閱讀 2077·2019-08-29 12:33
閱讀 1813·2019-08-26 12:10