天坑之旅之--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的设计了.
相关推荐
80530895 2020-07-05
mkhhxxttxs 2020-06-14
80500495 2020-06-14
86211943 2020-03-01
80530895 2020-02-23
80500495 2020-01-29
86211943 2020-01-24
lovecodeblog 2020-01-24
87261046 2019-12-23
86211943 2019-12-20
lightlanguage 2019-12-16
MYRENZHIBO 2019-08-28
85234656 2018-09-03
fudirong 2012-04-12
80500495 2019-07-01