表达式不定义具体的参数,get()请求一般被用来获取单个资源。
get(params,successFn,errrorFn) //GET /api/users nodejs服务器中get请求的编程方式 Cellars.get(function(resp){ //处理成功 },function(err){ //处理错误 });如果参数中传入了具名参数(例子中的参数是id),那么get()方法会向包含id的URL(这个在nodejs服务端中)发送请求:
//向nodejs服务器routes发起一个请求:GET-->/api/users/123 User.get({id:'1'},function(resp){ //success },function(error){ //fail });query向指定URL发送一个GET请求,并期望返回一个JSON格式的资源对象集合。 query()和get()方法之间唯一的区别是AngularJS期望query()方法返回数组。
//发起一个请求,上面的控制器就是这个 Cellars.query(function(cellars){ //读取集合中的所有对象 $scope cellars=cellars; });save方法向指定URL发送一个POST请求,并用数据体来生成请求体。save()方法用来在服务器上生成一个新的资源。 payload:代表请求发送的数据体.下面是创建一个酒窖区域Area的后台处理方法,数据体就是用户定义的酒窖区域name,
//发送一个请求 with the body { "areaname": $scope.area.areaname } $scope.createArea = function (area) { if (!$scope.area.areaname) { $window.alert('area name is required!'); return; } Areas.save({ name: $scope.cur_wc }, { "areaname": $scope.area.areaname }, function (resp) { if (resp.err) { $window.alert(resp.err); return; } $scope.hideModal(); $scope.actionwc.push(resp); }, function () { $window.alert('Create area failed! Please try again later.'); }); };请求处理方式如下
delete(params, payload, successFn, errorFn)delete方法会向指定URL发送一个DELETE请求,并用数据体来生成请求体。它被用来在服务器上删除一个实例:
// DELETE /api/users User.delete({}, { id: '123'//删除id为123的数据体 }, function(response) { // 处理成功的删除响应 }, function(response) { // 处理非成功的删除响应 });请求处理方式如下,这个东西是在nodejs中编写的 remove方法和delete()方法的作用是完全相同的,它存在的意义是因为delete是JavaScript的保留字,在IE浏览器中会导致额外的问题。
remove(params, payload, successFn, errorFn) // 发起一个请求: // DELETE /api/users User.remove({}, { id: '123' //删除id为123的使用者 }, function(response) { // 处理成功的删除响应 }, function(response) { // 处理非成功的删除响应 });如果参数中传入了具名参数(我们例子中的参数是id),那么post()方法会向包含id的URL发送请求,注意上面代码中的”@cellarid”,使用了@后,当执行post时,向/api/admin/cellar/:cellarid路由发送请求。
index.js文件
exports.Cellar = Cellar;//路径是db/index,在api中用到的 var Cellar = require('./cellar');// var Area = require('./area'); var mongoose = require('mongoose');cellar.js文件 这就是和本地mongodb数据库的交互操作了
var mongoose = require('mongoose'); var uuid = require('uuid'); var Schema = mongoose.Schema; var now = function () { return new Date(); }; var incCellarid = function(cellarid){ var cellarid = (parseInt(cellarid.substr(0), 16) + 1).toString(16); if (cellarid.length > 3) { return false; } if (cellarid.length < 3) { cellarid = '000'.substr(cellarid.length) + cellarid; } return cellarid; }; // Exports var schema = new Schema({ name: { type: String, unique: true }, cellarid: { type: String, require: true, index: true, match: /^[0-9a-f]{3}/ }, apikey: { type: String, unique: true, default: uuid.v4 }, createdAt: { type: Date, index: true, default: now } }); schema.static('exists', function(name, callback){ this.where('name', name).findOne(callback); }); schema.static('getNextCellarId', function(name, callback){ this.where('name').select('cellarid').sort('-cellarid').findOne(function(err, cellar){ if(err) { callback(err); return; } var cellarid; if(! cellar) { cellarid = "001"; callback(null, cellarid); return; } cellarid = incCellarid(cellar.cellarid); if(! cellarid){ callback('Not enough device ids available!'); return; } callback(null, cellarid); }); }); schema.static('getCellarByCellarid', function(cellarid, callback){ this.where('cellarid', cellarid).findOne(function(err, cellar){ if(err) { callback(err); return; } callback(null, cellar); }); }); module.exports = mongoose.model('Cellar', schema);/api/admin/cellar//:cellarid
var express = require('express'); var db = require('../../db/index');//请求数据库了 var Cellar = db.Cellar; .post(function(req, res){ Cellar.getCellarByCellarid(req.params.cellarid, function(err, cellar){ if(err || ! cellar) { res.send({ err: "Cellar dose not exist." }); return; } cellar.name = req.body.name; cellar.save(function(err, cellar){ if(err){ res.send({ err: "Save cellar failed." }); return; } res.send(cellar); }); }); })