Check the latest expressJS
>npm info express version
npmhttpGEThttps://registry.npmjs.org/expressnpmhttp304https://registry.npmjs.org/express 4.2.0
Then I put package.json there as follow>
{
"name": "hello",
"description": "first demo app",
"version": "0.0.1",
"private": true,
"dependencies": {
"express" : "4.2.0"
}
}
Use command to install all the dependency
>npm install
And >npm ls will list all the dependencies.
And the simplest app.js should be as follow>
var express = require('express');
var app = express();
app.listen(3000);
console.log('Listening on port 3000');
And there a plenty of examples here https://github.com/visionmedia/express/tree/master/examples
We can open the debug MODE
>DEBUG=express:* node app.js https://github.com/visionmedia/debug
2. Using ExpressJS to build CRUD
>sudo npm install -g express
>sudo npm install -g express-generator
This will install some core Express functionality right into my Node installation.
Generate the Project
>express userlist
Or
>express —css stylus userlist
Go to that directory, >npm install will install all the dependencies.
Run the application will be as follow:
>DEBUG=userlist ./bin/www
Some key parts are as follow> app.js Prepare the Monk Connection
// Mongodb Client Configuration
var mongo = require('mongodb’);
var monk = require('monk');
var db = monk('127.0.0.1:27010/userlist');
And Before we add the router, we need to expose the db client to the req
// make db available
app.use(function(req,res,next){
req.db = db;
next();
});
app.use('/', indexs);
app.use('/users', users);
Here is the service/mapping/control part, index.js which control all the router and http Method Mapping.
var express = require('express');
var debug = require('debug')('http');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'Express' });
});
/* GET users listing. */
router.get('/userlist', function(req, res) {
var db = req.db;
var users = db.get("users");
users.find({},{},function(e,docs){
res.render('userlist', {
"userlist" : docs
});
});
});
router.get('/newuser', function(req, res){
res.render('newuser', {title: 'Add New User' });
});
/* POST to Add User Service */
router.post('/adduser', function(req, res) {
var db = req.db;
// Get our form values. These rely on the "name" attributes
var userName = req.body.userName;
var userEmail = req.body.userEmail;
// Set our collection
var users = db.get('users');
// Submit to the DB
users.insert({
"userName" : userName,
"userEmail" : userEmail
}, function (err, doc) {
if (err) {
res.send("There was a problem adding the information to the database.");
}
else {
res.location("userlist");
res.redirect("userlist");
}
});
});
router.get('/deluser/:id', function(req, res){
debug("receive the id=" + req.params.id);
var db = req.db;
var id = req.params.id;
var users = db.get('users');
users.remove({_id: id}, function(err){
if(err){
res.send("Some Problem during deleting the user with id = " + id);
}
else {
res.location("/userlist");
res.redirect("/userlist");
}
})
});
module.exports = router;
And here is the jade part, I did not put much time on jade, actually my server side only provide REST API via JSON Format.
I plan to not use jade to construct my HTML.
userlist.jade is as follow>
extends layout
block content
h1.
User List
ul
each user, i in userlist
li
a(href="mailto:#{user.userEmail}")= user.userName
||||
a(href="/deluser/#{user._id}") Delete