天坑之旅之--restful設計(express,mongoose)

来源:http://www.cnblogs.com/binxchen/archive/2017/03/14/6550927.html
-Advertisement-
Play Games

簡單的express restful設計以及實現(一) 代碼地址為: "github" 主要是漫長的填坑之旅,涉及到的內容有node express restful ,雖然沒有完全的但是也是要記錄下來, npm install npm start 這裡解釋下 'npm start'就是運行packa ...


簡單的express restful設計以及實現(一)

代碼地址為:github

主要是漫長的填坑之旅,涉及到的內容有node express restful ,雖然沒有完全的但是也是要記錄下來,

npm install
npm start

這裡解釋下 'npm start'就是運行package.json裡面script中的

"start": "node ./bin/www"

其他的很多程式的入口是 npm run dev也是同個道理

然後資料庫是用的mongoose,查詢的操作以及一些方法可以自行查閱,

表的內容如下(books.js):

var bookschema = new mongoose.Schema({
book_pid:String,
book_name:String,
author:String,
price:String,
num:Number,
//0在售,1下架,2預定,3展示
state:String,
describe:String,
tel:Number,
// user_id:String,
create_date:{type:Date,dafault:Date.now}
});

user.js
var userschema=new mongoose.Schema({
username:String,
password:String,
//0管理員,1用戶,2游客
status:String
});

入口程式是routes,做路由的控制
//路由控制

module.exports = function (app) {
    //獲取所有用戶
    app.get('/users',User.getUsers);
    //獲取某個用戶
    app.get('/user/:id', User.getUser);
    //刪除某個用戶
    app.post('/userdel/:id', User.delUser);
    //添加一個用戶
    app.post('/user', User.addUser);
    //更新一個用戶
    app.put('/user/:id', User.updateUser);

    //分頁獲取書
    app.post('/book/get_books',User.getBooks);
    //獲取某一本書
    app.post('/book/:id',User.getBook);
    //添加一本書
    app.post('/book/add_book', User.addBook);
    //刪除一本書
    app.post('/book/del_book', User.delBook);
    //更新一本書
    // app.put('/book/:id',Book.updateBook);

};

使用的全是post方法,也可以使用get,post,delect,put等

方法是在controller中定義的

//獲取所有用戶
exports.getUsers= function(req, res) {
    User.find({}, function (err, docs) {
        if(err){
            res.json({"status":"error","msg":"查找用戶失敗"});
        }
        res.json({"status":"success","data":docs});
    })
};

//獲取某一個用戶
exports.getUser= function(req, res) {

    var id=req.params.id;

    User.findOne({_id:id},function(err,doc){
        if(err){
            res.json({"status":"error"});
        }else{
            res.json({"status":"success","data":doc})
        }
    });
};

//刪除某一個用戶
exports.delUser= function(req, res) {

    var id=req.params.id;

    User.remove({_id:id},function(err,doc){
        if(err){
            res.json({"status":"error"});
        }else{
            res.json({"status":"success"})
        }
    });
};

//添加一個用戶
exports.addUser= function(req, res) {
    var username=req.body.username;
    var password=req.body.password;

    var newUser=new User(
        {
            username:username,
            password:password
        }
    );
    newUser.save(function(err){
        if(err){
            res.json({"status":"error"})
        }else{
            res.json({"status":"success"});
        }
    });

};

//更新某個用戶
exports.updateUser= function(req, res) {
    var id=req.params.id;

    var username=req.body.username;
    console.log(username);
    var password=req.body.password;
    console.log(password);

    // 修改記錄
    var conditions ={_id : id};
    var update     ={$set : {username:username, password : password}};
    var options    = {upsert : true};
    User.update(conditions, update, options, function(error){
        if(error) {
            res.json({"status":"error"});
        } else {
            res.json({"status":"success"});
        }
    });
};

// 添加書籍
exports.getBooks = function(req, res) {
    var book_pid=req.body.book_pid;
    var book_name=req.body.book_name;
    var author=req.body.author;
    var price=req.body.price;
    var num=req.body.num;
    var state=req.body.state;
    var describe=req.body.describe;
    var tel=req.body.tel;
    var create_date=req.body.create_date;

    var data=new Books(
        {
          book_pid:book_pid,
          book_name:book_name,
          author:author,
          price:price,
          num:num,
          //0在售,1下架,2預定,3展示
          state:state,
          describe:describe,
          tel:tel,
          create_date:create_date
        }
    );
    data.save(function(err){
        if(err){
            res.json({"status":"error"})
        }else{
            res.json({"status":"書籍已寫入"});
        }
    });
};

// 分頁獲取書籍
exports.addBook = function(req, res) {
    var curr=req.body.curr;
    //每頁大小為10
    //返回所有查詢的結果
    var query=Books.find({});
    // 跳過前N個文檔,返回其餘的
    query.skip((curr-1)*10);
    // 限制返回結果的數量
    query.limit(10);
    //按照id添加的順序倒序排列
    //排序 鍵對應文檔的鍵名, 值代表排序方向, 1 升序, -1降序
    query.sort({'_id': -1});
    //計算分頁數據
    query.exec(function(err,rs){
        if(err){
            res.send(err);
        }else{
            //計算數據總數
            Books.find(function(err,result){
                if(result.length%10>0){
                    pages=result.length/10+1;
                }else{
                    pages=result.length/10;
                }
                jsonArray={data:rs,pages:pages};
                res.json(jsonArray);
            });
        }
    });
};

//刪除一個書籍
exports.delBook= function(req, res) {
    var id=req.body.id;
    Books.remove({_id:id},function(err,doc){
        if(err){
            res.json({"status":"error"});
        }else{
            res.json({"status":"success"})
        }
    });

};

//獲取書籍詳情
exports.getBook = function(req, res) {

    var id=req.body.id;
    Books.findOne({_id:id},function(err,doc){
        if(err){
            res.json({"status":"error"});
        }else{
            res.json({"status":"success","data":doc.content})
        }
    });

進行過簡單的測試,可能還有一點點的錯誤,但是基本上都是對的了.可以往資料庫裡面添加了,以及返回部分json,第二集的話可能會是完整版的,不過要等我認真的看一遍資料庫的操作,以及一些restful的設計了.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 獲取URL裡面傳的參數,在Js中不能像後臺一樣使用Request.QueryString來獲取URL裡面參數,下麵介紹兩種方式用來獲取參數 方式一:使用split分隔來獲取,這種方法考試了地址中包含了returnUrl參數的形式,如果地址中本來就包含了另外一個網址,這個時候需要先過濾掉這個網址再去獲 ...
  • 前言 在vue里,組件之間的作用域是獨立的,父組件跟子組件之間的通訊可以通過prop屬性來傳參,但是在兄弟組件之間通訊就比較麻煩了。比如A組件要告訴一件事給B組件,那麼A就要先告訴他們的爸組件,然後爸組件再告訴B。當組件比較多,要互相通訊的事情很多的話,爸組件要管他們那麼多事,很累的。vuex正是為 ...
  • 本文實現了一個簡單的個人漫畫網站,配合之前的漫畫爬蟲使用。享受無處不在的漫畫生活。 github地址:https://github.com/miaoerduo/cartoon-cat-server 歡迎大家star、fork和指教。 ...
  • JavaScript變數包含的兩種不同數據類型的值——基本類型值和引用類型值的區別;ECMAScript和JavaScript的關係。 ...
  • 1、index.html 主要搭建頁面的結構 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html ...
  • 給大家介紹的是原生js更改CSS樣式的兩種方式: 1通過target.style.cssText="CSS表達式"實現 2活用classname動態更改樣式 ...
  • 任何一個容器都可以指定為Flex佈局。 行內元素也可以使用Flex佈局。 Webkit內核的瀏覽器,必須加上-webkit首碼。 註意,設為Flex佈局以後,子元素的float、clear和vertical-align屬性將失效。 採用Flex佈局的元素,稱為Flex容器(flex containe ...
  • 這是《前端總結·基礎篇·JS》系列的第二篇,主要總結一下JS數組的使用、技巧以及常用方法。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...