天坑之旅之--restful设计(express,mongoose)

简单的express restful设计以及实现(一)

代码地址为:github

主要是漫长的填坑之旅,涉及到的内容有node express restful ,虽然没有完全的但是也是要记录下来,

[blockquote]

npm install npm start

[/blockquote]

这里解释下 '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的设计了.

相关推荐