<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 最后的項目 ### 新建文件夾 ~~~ (c) 2015 Microsoft Corporation。保留所有權利。 C:\Users\zxyslt>d: D:\>mkdir demo D:\>cd demo D:\demo>express -h Usage: express [options] [dir] Options: -h, --help output usage information -V, --version output the version number -e, --ejs add ejs engine support (defaults to jade) --hbs add handlebars engine support -H, --hogan add hogan.js engine support -c, --css <engine> add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css) --git add .gitignore -f, --force force on non-empty directory ~~~ #### 提示 最新express4.0版本中將命令工具分家出來了(項目地址:https://github.com/expressjs/generator), 所以我們還需要安裝一個命令工具,命令如下: `npm install -g express-generator` ### 創建項目 ~~~ D:\demo>express -e demo create : demo create : demo/package.json create : demo/app.js create : demo/public/stylesheets create : demo/public/stylesheets/style.css create : demo/public create : demo/views create : demo/views/index.ejs create : demo/views/error.ejs create : demo/routes create : demo/routes/index.js create : demo/routes/users.js create : demo/bin create : demo/bin/www install dependencies: > cd demo && npm install run the app: > SET DEBUG=demo:* & npm start create : demo/public/javascripts create : demo/public/images D:\demo> ~~~ ~~~ D:\demo>cd demo && npm install [ ..............] / fetchMetadata: sill mapToRegistry uri https://registry.npmjs.org/raw-body ~~~ ### 運行 ~~~ D:\demo\demo>set debug=demo:* & npm start > demo@0.0.0 start D:\demo\demo > node ./bin/www demo:server Listening on port 3000 +0ms ~~~ 截圖 ![](https://box.kancloud.cn/c781f2f3d293b46c004a7361c624d5fa_921x459.png) ### 用喜歡的編輯器打開文件夾 ![](https://box.kancloud.cn/5400bb5fc3f5b68f9087d2f3eddf8cca_710x570.png) 打開之后 ![](https://box.kancloud.cn/7895fd75e44daca77d217b75cd87fd59_437x327.png) 主要在 views 和 routes 下面寫代碼 ### public 和 views 下面替換成我們自己的界面 ![](https://box.kancloud.cn/bb04f66332e1d41922834da6afb5f420_422x475.png) ### router 關鍵代碼 view 關鍵代碼和 jquer哪里的基本一樣只是請求的路徑不同和一點小坑 ~~~ var express = require('express'); var router = express.Router(); //使用 path.join 時 需要引入 path module var path = require('path'); //使用 mysql 數據庫 需要引入的 mysql module var mysql = require('mysql'); // 數據庫連接信息 var dbinfo = { //主機地址 host: '127.0.0.1', //用戶名 user: 'root', //密碼 password: 'root', //端口 port: '3306', //具體的數據庫 database: 'xj2014' }; //-------------------------------------------------------------------------- 頁面處理 begin //返回主頁面 router.get('/', function(req, res, next) { //讀取靜態文件返回 // path.join()鏈接路徑 // __dirname 內置變量 指 當前文件路徑 //'../views/index.html' 相對路徑 res.sendFile(path.join(__dirname, '../views/index.html')); //直接讀取文件 // res.sendFile('/views/add.html'); //另外的 拼接方式 // res.sendFile('index.html', { root: path.join(__dirname, '../views') }); //直接渲染模板 文件(index.ejs) 傳遞數據 tetle // res.render('index', { title: 'Express' }); }); //返回主頁面 router.get('/index', function(req, res, next) { //讀取靜態文件返回 res.sendFile(path.join(__dirname, '../views/index.html')); }); //返回列表頁面 router.get('/info', function(req, res, next) { //讀取靜態文件返回 res.sendFile(path.join(__dirname, '../views/info.html')); }); //返回添加頁面 router.get('/add', function(req, res, next) { //讀取靜態文件返回 res.sendFile(path.join(__dirname, '../views/add.html')); }); //返回修改頁面 router.get('/edit', function(req, res, next) { //讀取靜態文件返回 res.sendFile(path.join(__dirname, '../views/edit.html')); }); //------------------------------------------------------------------------頁面處理 end //數據處理 //首頁數據 //all ->主要包括 get && post 方便調試 實際項目中需要做限制 router.all('/info/getpage', function(req, res, next) { //添加響應頭的 "Access-Control-Allow-Origin", "*" //允許跨域訪問 * 代表所有 res.header("Access-Control-Allow-Origin", "*"); //準備變量 var resData = {}; //關鍵字 var key; //頁索引 var pi; //每一頁的大小 var ps; //獲取參數--POST 全部大寫 if (req.method == 'POST') { key = req.body.key || ''; //如果轉換成 10進制數失敗則 置為 1 if (isNaN(parseInt(req.body.pi, 10))) { pi = 1; } else { pi = parseInt(req.body.pi, 10); } //如果轉換成 10進制數失敗則 置為 1 if (isNaN(parseInt(req.body.ps, 10))) { ps = 1; } else { ps = parseInt(req.body.ps, 10); } } else { //獲取參數--get key = req.query.key || ''; //如果轉換成 10進制數失敗則置為 1 if (isNaN(parseInt(req.query.pi, 10))) { pi = 1; } else { pi = parseInt(req.query.pi, 10); } //如果轉換成 10進制數失敗則置為 1 if (isNaN(parseInt(req.query.ps, 10))) { ps = 1; } else { ps = parseInt(req.query.ps, 10); } } //創建數據庫連接 var connect = mysql.createConnection(dbinfo); //打開數據庫連接 connect.connect(); //執行數據庫語句 //callback 根據前面的 sql 的不同 會有不同的參數 //connect.query(sql,param,callback) //查詢數據 connect.query('select * from userinfo where name like concat("%",?,"%") limit ?,? ', [key, ps * (pi - 1), ps], function(err, data, fidlds) { if (!err) { //保存數據 resData.data = data; //查詢數據總條數 用來計算分頁 connect.query('select count(*) as counts from userinfo where name like concat("%",?,"%")', [key], function(err1, data1, fidlds1) { if (!err1) { //保存數據總條數 resData.count = data1[0].counts; //關閉數據庫連接 connect.end(); //返回數據給瀏覽器 json res.send({ status: 1, message: resData }); } else { //返回數據給瀏覽器 json res.send({ status: 0, message: err1 }); } }); } else { //返回數據給瀏覽器 json res.send({ status: 0, message: err }); } }); }); //刪除數據 router.post('/info/delinfo', function(req, res, next) { var id; //如果轉換成 10進制數失敗則返回錯誤信息 if (isNaN(parseInt(req.body.id, 10))) { res.send({ status: 0, message: '非法的操作' }); } else { id = parseInt(req.body.id, 10); } //創建數據庫連接 var connect = mysql.createConnection(dbinfo); //打開數據庫連接 connect.connect(); //執行數據庫語句 connect.query('delete from userinfo where id=?', [id], function(err, data, fidlds) { //關閉數據庫連接 connect.end(); //執行沒有出錯 并且 只操作了一條數據--------合理的話應該涉及到 事務回滾 //返回相應的 json格式數據 if (!err && data.affectedRows == 1) { res.send({ status: 1, message: data }); } else { res.send({ status: 0, message: err }); } }); }); //獲取單條數據 router.all('/info/oneinfo', function(req, res, next) { //定義變量 var id; //獲取參數--POST 全部大寫 if (req.method == "POST") { //如果轉換成 10進制數失敗則 置為 0 if (isNaN(parseInt(req.body.id, 10))) { id = 0; } else { id = parseInt(req.body.id, 10); } } else { //get //如果轉換成 10進制數失敗則 置為 0 if (isNaN(parseInt(req.query.id, 10))) { id = 0; } else { id = parseInt(req.query.id, 10); } } //id == 0 則表示出錯了 if (id != 0) { //創建數據庫連接 var connect = mysql.createConnection(dbinfo); //打開數據庫連接 connect.connect(); //執行數據庫語句 connect.query('select * from userinfo where id=?', [id], function(err, data, fidlds) { connect.end(); if (!err && data.length == 1) { //數據返回一個數字 我們查詢的結果只是 第一條數據 res.send({ status: 1, message: data[0] }); } else { res.send({ status: 0, message: "未查詢到相應數據" }); } }); } else { //參數錯誤則返回提示 res.send({ status: 0, message: "參數id錯誤" }); } }); //修改數據 router.post('/edit/updinfo', function(req, res, next) { //post //如果轉換成 10進制數失敗則 返回錯誤信息 if (!isNaN(parseInt(req.body.id, 10))) { var id = parseInt(req.body.id, 10); if (req.body.num && req.body.classs && req.body.name && req.body.sex && req.body.nation && req.body.address) { //創建數據庫連接 var connect = mysql.createConnection(dbinfo); //打開數據庫連接 connect.connect(); //執行數據庫語句 connect.query('update userinfo set num=?,classs=?,name=?,sex=?,nation=?,address=? where id=?', [req.body.num, req.body.classs, req.body.name, req.body.sex, req.body.nation, req.body.address, req.body.id], function(err, data, fidlds) { //關閉連接 connect.end(); //沒有錯誤 并且 影響行數為1--------合理的話應該涉及到 事務回滾 if (!err && data.affectedRows == 1) { res.send({ status: 1, message: data }); } else { res.send({ status: 0, message: err }); } }); } else { res.send({ status: 0, message: "參數錯誤" }); } } else { res.send({ status: 0, message: "參數錯誤" }); } }); //添加數據 router.post('/add', function(req, res, next) { //判斷修改字段是否存在 if (req.body.num && req.body.classs && req.body.name && req.body.sex && req.body.nation && req.body.address) { //創建數據庫連接 var connect = mysql.createConnection(dbinfo); //打開數據庫連接 connect.connect(); //執行數據庫語句 connect.query('insert into userinfo (num,classs,name,sex,nation,address ) values (?,?,?,?,?,?)', [req.body.num, req.body.classs, req.body.name, req.body.sex, req.body.nation, req.body.address], function(err, data, fidlds) { //關閉連接 connect.end(); //沒有錯誤 并且 影響行數為1--------合理的話應該涉及到 事務回滾 if (!err && data.affectedRows == 1) { res.send({ status: 1, message: data }); } else { res.send({ status: 0, message: err }); } }); } else { //不都存在 res.send({ status: 0, message: "參數錯誤" }); } }); module.exports = router; ~~~ ### 源代碼 包括數據庫文件 [源代碼](http://pan.baidu.com/s/1jIz3CvO) [數據庫](http://pan.baidu.com/s/1nv6kscT) ## lx Email:zxysilent@foxmail.om Tel:18284151024 QQ:76387097
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看