skip to main | skip to sidebar

Blog Edan

  • Entries (RSS)
  • Comments (RSS)
  • Home

Selasa, 01 Mei 2012

[html5apps] Promises for server side code in Node.js

Diposting oleh Den TOMJERRX di 5/01/2012 11:23:00 PM
 

Most of the client side libraries like jQuery and WinJS have implemented  async promises. My job today was to implement promises on the server side i.e. Node.js
 
Read the following link to understand promises which is implemented by the q module of Node.js:
http://howtonode.org/promises

In my application in the panacloud.js module I implement promises which are consumed in app.js:
 
Note: I am tired and done for today, u should do nodding for the night )


//************************************************************
// app.js main express module
//************************************************************

var express = require('express')
, routes = require('./routes');
var pc = require('./panacloud.js');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
app.listen(3000, function(){
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});
// Routes
app.get('/api/isregistered/:fbid', function(req, res){
if(req.params.fbid){
var promise = pc.isRegisteredAsync(req.params.fbid);
promise.then(function(data){
res.send(data);
}, function(err){
res.send(err);
});
} else {
res.send({status:"nok", message:"Incomplete Data in request"});
}
});

app.post('/api/register', express.bodyParser(), function(req, res) {
if (req.body && req.body.fbid && req.body.pcid && req.body.fbtoken) {
pc.registerAsync(req.body.fbid, req.body.pcid, req.body.fbtoken).then(function(data){
res.send(data);
}, function(err) {
res.send(err);
});
} else {
res.send({status:"nok", message:"Incomplete Data in request"});
}
});

app.get('/', routes.index);



//************************************************************
// panacloud.js module
//************************************************************

/**
* Created with JetBrains WebStorm.
* User: zia
* Date: 4/21/12
* Time: 4:30 PM
* To change this template use File | Settings | File Templates.
*/
//http://howtonode.org/promises
//https://github.com/kriskowal/q
var q = require('q');
//http://groups.google.com/group/mongoose-orm/browse_thread/thread/3207ec40b672ca3d?pli=1
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/panaclouddb');
var Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;
var User = new Schema({
fbid : { type: String, index: true }
, pcid : { type: String, index: true }
, fbtoken : String
, name : String
, firstname : String
, lastname : String
, lastupdate : { type: Date, default: Date.now }
});
var UserModel = mongoose.model('User', User);

exports.isRegisteredAsync = function (fbid) {
var deferred = q.defer();
UserModel.findOne({ fbid: fbid}, function (err, doc){
//doc is a Document
if(err){
deferred.reject( { status: "nok", errormsg: "database error", errobj: err } );
} else {
if(doc){
deferred.resolve( {status:"ok", isRegistered: true, fbid: doc._doc.fbid, pcid: doc._doc.pcid} );
} else {
deferred.resolve( {status:"ok", isRegistered: false} );
}
}
});
return deferred.promise;
};
exports.registerAsync = function (fbid, pcid, fbtoken) {
var deferred = q.defer();
var u1 = new UserModel();
u1.pcid = pcid;
u1.fbid = fbid;
u1.fbtoken = fbtoken;
u1.save(function(err){
if(err){
deferred.reject({status:"nok", message:"Panacloud Registeration Failed", errobj: err});
}
else {
console.log("Added User");
deferred.resolve( {status:"ok", message:"Panacloud User Registered"});
}
});
return deferred.promise;
};


_______________________________________________________________________________
Zia Khan: http://www.google.com/profiles/ziakhan
Become my friend on Facebook: http://www.facebook.com/ziakhan
Mobile: 92-300-826-3374 (Pakistan)
Our Nation Building Plan for Pakistan: http://operationbadar.org/Documents/OB_Plan.pdf
Microsoft's Windows Azure Discussion Group: 3,200+ Members
CFA, CPA, and CMA Exam Preparation Discussion Group: 3,900+ Members
_______________________________________________________________________________

__._,_.___
Reply to sender | Reply to group | Reply via web post | Start a New Topic
Messages in this topic (1)
Recent Activity:
  • New Members 1
Visit Your Group
Yahoo! Groups
Switch to: Text-Only, Daily Digest • Unsubscribe • Terms of Use
.

__,_._,___
Kirimkan Ini lewat Email BlogThis! Bagikan ke X Berbagi ke Facebook

0 komentar:

Posting Komentar

Posting Lebih Baru Posting Lama Beranda
Langganan: Posting Komentar (Atom)

Labels

  • ping script (1)
  • Url Submiter (1)

Blog Archive

Total Tayangan Halaman

Our Partners

All About Tutorial
Free link exchange All Content Let's Cheat The Games Free Backlink Rea Soft Free Domain Name

Archive

Meta Tag Analyser

Translator

blogger widgets

Referrer Link

www.e-referrer.com

 

© 2010 Blog Edan
designed by Wong Edan - All About Tutorial