![]() |
I'll admit it, I'm a sucker for simple generation of skeleton. That's why I loved using rails. The entire MVC structure is laid out for me and I can be on my way.
- rails new myapp --database=postgresql
- rails generate scaffold Blob name:string badge:integer dob:date isloved:boolean
Within Node.js, the standard for creating web apps is Express.js. Express even has a template generator. Since you know I'm a sucker for it, let's use that. I'm going to assume you have Node.js & NPM already installed.
- npm install -g express
- npm install -g express-generator
- express nodewebapp
- create : nodewebapp/app.js
- create : nodewebapp/public
- create : nodewebapp/public/images
- create : nodewebapp/public/stylesheets
- create : nodewebapp/public/stylesheets/style.css
- create : nodewebapp/routes
- create : nodewebapp/routes/index.js
- create : nodewebapp/routes/users.js
- create : nodewebapp/public/javascripts
- create : nodewebapp/views
- create : nodewebapp/views/index.jade
- create : nodewebapp/views/layout.jade
- create : nodewebapp/views/error.jade
- create : nodewebapp/bin
- create : nodewebapp/bin/www
- install dependencies:
- $ cd nodewebapp && npm install
- run the app:
- $ DEBUG=nodewebapp:* ./bin/www
Do you have MongoDB setup? If you haven't, no worries. It's actually incredibly easy with your Mac and Homebrew.
- brew update
- brew install mongodb
- kcoleman-mbp: kcoleman$ mongod
- mongod --help for help and startup options
- 2015-03-04T09:59:26.150-0500 [initandlisten] MongoDB starting : pid=13761 port=27017 dbpath=/data/db 64-bit host=kcoleman-mbp.local
- 2015-03-04T09:59:26.150-0500 [initandlisten] db version v2.6.7
- 2015-03-04T09:59:26.150-0500 [initandlisten] git version: nogitversion
- 2015-03-04T09:59:26.150-0500 [initandlisten] build info: Darwin minimavericks.local 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
- 2015-03-04T09:59:26.150-0500 [initandlisten] allocator: tcmalloc
- 2015-03-04T09:59:26.150-0500 [initandlisten] options: {}
- 2015-03-04T09:59:26.151-0500 [initandlisten] journal dir=/data/db/journal
- 2015-03-04T09:59:26.152-0500 [initandlisten] recover : no journal files present, no recovery needed
- 2015-03-04T09:59:26.184-0500 [initandlisten] waiting for connections on port 27017
- kcoleman-mbp:kcoleman$ mongo
- MongoDB shell version: 2.6.7
- connecting to: test
- > use nodewebappdb
- switched to db nodewebappdb
- > db
- nodewebappdb
- > show dbs
- admin (empty)
- local 0.078GB
- nodews4 0.078GB
- nodewebappdb 0.078GB
- >
We will need to install the dependencies before we fire up the server, but I like to make sure we get our database pieces sorted first. Open up your favorite editor, such as Sublime Text or Atom, and make a new folder within nodewebapp called model. Inside this folder create a new file called db.js. This is the file where we are going to place our database connections.
- var mongoose = require('mongoose');
- mongoose.connect('mongodb://localhost/nodewebappdb');
- var express = require('express'),
- path = require('path'),
- favicon = require('serve-favicon'),
- logger = require('morgan'),
- cookieParser = require('cookie-parser'),
- bodyParser = require('body-parser'),
- db = require('./model/db'),
- routes = require('./routes/index'),
- users = require('./routes/users');
- ..
- ..
- ..
Now we need to install our dependencies. from the terminal of the working directory of nodewebapp type
- npm install
- kcoleman-mbp:nodewebapp kcoleman$ npm install
- debug@2.1.2 node_modules/debug
- └── ms@0.7.0
- cookie-parser@1.3.4 node_modules/cookie-parser
- ├── cookie-signature@1.0.6
- └── cookie@0.1.2
- morgan@1.5.1 node_modules/morgan
- ├── basic-auth@1.0.0
- ├── depd@1.0.0
- └── on-finished@2.2.0 (ee-first@1.1.0)
- serve-favicon@2.2.0 node_modules/serve-favicon
- ├── ms@0.7.0
- ├── fresh@0.2.4
- ├── parseurl@1.3.0
- └── etag@1.5.1 (crc@3.2.1)
- body-parser@1.10.2 node_modules/body-parser
- ├── media-typer@0.3.0
- ├── bytes@1.0.0
- ├── raw-body@1.3.2
- ├── depd@1.0.0
- ├── qs@2.3.3
- ├── iconv-lite@0.4.6
- ├── on-finished@2.2.0 (ee-first@1.1.0)
- └── type-is@1.5.7 (mime-types@2.0.9)
- express@4.11.2 node_modules/express
- ├── utils-merge@1.0.0
- ├── methods@1.1.1
- ├── cookie@0.1.2
- ├── fresh@0.2.4
- ├── range-parser@1.0.2
- ├── merge-descriptors@0.0.2
- ├── cookie-signature@1.0.5
- ├── escape-html@1.0.1
- ├── vary@1.0.0
- ├── media-typer@0.3.0
- ├── parseurl@1.3.0
- ├── finalhandler@0.3.3
- ├── serve-static@1.8.1
- ├── content-disposition@0.5.0
- ├── path-to-regexp@0.1.3
- ├── depd@1.0.0
- ├── on-finished@2.2.0 (ee-first@1.1.0)
- ├── qs@2.3.3
- ├── etag@1.5.1 (crc@3.2.1)
- ├── proxy-addr@1.0.6 (forwarded@0.1.0, ipaddr.js@0.1.8)
- ├── accepts@1.2.4 (negotiator@0.5.1, mime-types@2.0.9)
- ├── type-is@1.5.7 (mime-types@2.0.9)
- └── send@0.11.1 (destroy@1.0.3, ms@0.7.0, mime@1.2.11)
- jade@1.9.2 node_modules/jade
- ├── character-parser@1.2.1
- ├── void-elements@2.0.1
- ├── commander@2.6.0
- ├── mkdirp@0.5.0 (minimist@0.0.8)
- ├── with@4.0.1 (acorn-globals@1.0.2, acorn@0.11.0)
- ├── constantinople@3.0.1 (acorn-globals@1.0.2)
- └── transformers@2.1.0 (promise@2.0.0, css@1.0.8, uglify-js@2.2.5)
- npm install mongoose --save
- npm install body-parser --save
- npm install method-override --save
- kcoleman-mbp:nodewebapp kcoleman$ npm start
- > nodewebapp@0.0.1 start /Users/kcoleman/Documents/projects/nodewebapp
- > node ./bin/www
![]() |
We've got a functioning web server that is talking to Mongo. Part 1 is accomplished.
Coming from a Rails background, it was pretty easy to create a new model with all the routes, controllers and views through a simple scaffold. Node.js on the other hand requires most of this to be done manually.
Create the Model and Schema
Remember that model folder we created earlier? We are going to use that folder to form our objects. Create a new file within that folder for whatever your object is going to be. In this case, I'm going to call it blobs.js. Use the plural form of the object.
Each blob is going to have a Name (string), Badge (number), DOB (date), and IsLoved (boolean). Mongoose Schema Types
- var mongoose = require('mongoose');
- var blobSchema = new mongoose.Schema({
- name: String,
- badge: Number,
- dob: { type: Date, default: Date.now },
- isloved: Boolean
- });
Within app.js add this to your variables at the top below our db variable we added earlier
- ...
- db = require('./model/db'),
- blob = require('./model/blobs'),
- ...
If you found this post interesting, follow and support us.
Suggest for you:


No comments:
Post a Comment