Created
April 27, 2012 11:21
-
-
Save jeffdonthemic/2508492 to your computer and use it in GitHub Desktop.
Force.com Node.js Demo - app.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Module dependencies. | |
*/ | |
var express = require('express') | |
, routes = require('./routes') | |
, rest = require('./rest.js') | |
, oauth = require('./oauth.js') | |
, url = require('url'); | |
/** | |
* Setup some environment variables (heroku) with defaults if not present | |
*/ | |
var port = process.env.PORT || 3001; // use heroku's dynamic port or 3001 if localhost | |
var cid = process.env.CLIENT_ID || "YOUR-REMOTE-ACCESS-CONSUMER-KEY"; | |
var csecr = process.env.CLIENT_SECRET || "YOUR-REMOTE-ACCESS-CONSUMER-SECRET"; | |
var lserv = process.env.LOGIN_SERVER || "https://login.salesforce.com"; | |
var redir = process.env.REDIRECT_URI || "http://localhost:" + port + "/token"; | |
/** | |
* Middleware to call identity service and attach result to session | |
*/ | |
function idcheck() { | |
return function(req, res, next) { | |
// Invoke identity service if we haven't got one or access token has | |
// changed since we got it | |
if (!req.session || !req.session.identity || req.session.identity_check != req.oauth.access_token) { | |
rest.api(req).identity(function(data) { | |
console.log(data); | |
req.session.identity = data; | |
req.session.identity_check = req.oauth.access_token; | |
next(); | |
}); | |
} else { | |
next(); | |
} | |
} | |
} | |
/** | |
* Create the server | |
*/ | |
var app = express.createServer( | |
express.cookieParser(), | |
express.session({ secret: csecr }), | |
express.query(), | |
oauth.oauth({ | |
clientId: cid, | |
clientSecret: csecr, | |
loginServer: lserv, | |
redirectUri: redir, | |
}), | |
idcheck() | |
); | |
/** | |
* Configuration the server | |
*/ | |
app.configure(function(){ | |
app.set('views', __dirname + '/views'); | |
app.set('view engine', 'jade'); | |
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()); | |
}); | |
/** | |
* Routes | |
*/ | |
// 'home' page | |
app.get('/', routes.index); | |
// list of accounts - see routes/index.js for more info | |
app.get('/accounts', routes.accounts); | |
// form to create a new account | |
app.get('/accounts/new', function(req, res) { | |
// call describe to dynamically generate the form fields | |
rest.api(req).describe('Account', function(data) { | |
res.render('new', { title: 'New Account', data: data }) | |
}); | |
}); | |
// create the account in salesforce | |
app.post('/accounts/create', function(req, res) { | |
rest.api(req).create("Account", req.body.account, function(results) { | |
if (results.success == true) { | |
res.redirect('/accounts/'+results.id); | |
res.end(); | |
} | |
}); | |
}); | |
// display the account | |
app.get('/accounts/:id', function(req, res) { | |
rest.api(req).retrieve('Account', req.params.id, null, function(data) { | |
res.render('show', { title: 'Account Details', data: data }); | |
}); | |
}); | |
// form to update an existing account | |
app.get('/accounts/:id/edit', function(req, res) { | |
rest.api(req).retrieve('Account', req.params.id, null, function(data) { | |
res.render('edit', { title: 'Edit Account', data: data }); | |
}); | |
}); | |
// update the account in salesforce | |
app.post('/accounts/:id/update', function(req, res) { | |
rest.api(req).update("Account", req.params.id, req.body.account, function(results) { | |
res.redirect('/accounts/'+req.params.id); | |
res.end(); | |
}); | |
}); | |
app.listen(port, function(){ | |
console.log("Express server listening on port %d in %s mode", | |
app.address().port, app.settings.env); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment