In this post, we’re going to be creating a sample comments system using Node, Express and Mongoose. Mongoose provides an object oriented interface for using MongoDB in Node. Everything in Mongoose starts with a Schema. Each schema maps to a MongoDB collection and defines the shape of the documents within that collection. If you are not familiar with Mongoose I suggest you read the docs here.

Getting Started
For this tutorial, you will need Express and MongoDB installed on your machine. I covered this in a previous tutorialso refer to it in case you don’t already have them installed.

Mongoose
To install Mongoose, open your terminal screen and enter the following:

$ npm install mongoose

To automatically build out an application template for your application, navigate to the directory where you wish to create your application and run the following code:

mkdir MongooseExample
cd MongooseExample
express -c stylus
npm install -d

What this does:

  • create the directory for your application.
  • create your application template using the jade template engine and the stylus css engine.

You should now be able to run your application and see a generic Express application.

node app.js

Navigate to http://localhost:3000

Installing Dependencies
First we need to add our dependency for Mongoose. Open your package.json and add the following code:

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.1.0",
    "jade": "*",
    "stylus": "*",
    "mongoose" : "3.2.0"
  }
}

Everything should have already been there with the exception of "mongoose" : "3.2.0". Once you have saved the file run the following code to download and install the nodejs client for mongoose:

npm install -d

The Code
db.js
Now we’re going to create a file called db.js to configure MongoDB and our schema.

var mongoose = require( 'mongoose' );
var Schema   = mongoose.Schema; var Comment = new Schema({
    username : String,
    content  : String,
    created  : Date
}); mongoose.model( 'Comment', Comment ); mongoose.connect( 'mongodb://localhost/express-comment' );

Save this file in the same directory as app.js. The first thing we do is include mongoose and get a reference to schema. Everything in mongoose is derived from a schema. Next, we create our Comment schema and compile it into a model. Last we open a connection to our express-comment database on our locally running instance of MongoDB.

app.js
Open app.js and add require( './db' ); at the top of the file. It should look this:


/**
 * Module dependencies.
 */ require( './db' ); //for mongoose. Require this first!!! var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path'); var app = express(); app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
}); app.configure('development', function(){
  app.use(express.errorHandler());
}); app.get('/', routes.index);
app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

index.js
Open index.js and add the following code:

var mongoose = require( 'mongoose' );
var Comment = mongoose.model( 'Comment' ); exports.index = function ( req, res ){
  Comment.find( function ( err, comments, count ){
    res.render( 'index', {
        title : 'Comment System with Mongoose and Node',
        comments : comments
    });
  });
}; exports.create = function ( req, res ){
  new Comment({
    username : req.body.username,
    content : req.body.comment,
    created : Date.now()
  }).save( function( err, comment, count ){
    res.redirect( '/' );
  });
};

The first thing we do is require mongoose and the Comment model before we can use it. The index function is replaced with one that queries the database for comments and returns them to the index page. Comment.find is used to pull all comment collections. The create function saves a new comment from form values. We’ll create the form in a minute. First, add the following line to app.js: app.post( '/create', routes.create );
It should now look like this:

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

index.jade
Open index.jade and add the form and a loop to show the comments under the form.

extends layout

block content
  h1= title
  div.addCommentForm
        form( method="post", action="/create")
            div
                div
                    span.label Name :
                    input(type="text", class="nameTxt", name="username")
                div
                    span.label Comment :
                    textarea(name="comment")
                div#addCommentSubmit
                    input(type="submit", value="Save")
  br
  br
  #comments
    - each comment in comments
      div.comment
        div.name= comment.username
        div.created_at= comment.created
        br
        div.content= comment.content
        hr
 

style.styl
You will need to pretty up the page so open style.styl and add the following code:

body
  padding: 50px
  font: 14px "Lucida Grande", Helvetica, Arial, sans-serif
a
  color: #00B7FF
.addCommentForm
    width 450px
  input[type =text]
    width 200px
    margin-left 38px
  textarea
    width 200px
    margin-left 10px
  input[type =button], input[type =submit]
    clear both
    margin-left 85px
    display block
  .label
      text-align right !important
      display block
      float left
#comments
  .name
    float left
  .created_at
    float right
  .content
    clear both

Now re-run the application and you should be able to add comments which will display under the form. Navigate to localhost:3000 and make sure you have MongoDB up and running.

node app.js

Download the source code at https://github.com/ijason/NodeJS-Mongoose

Getting Started with Mongoose and Node.js – A Sample Comments System | Dev Notes的更多相关文章

  1. node.js delete directory & file system

    node.js delete directory & file system delete a not empty directory https://nodejs.org/api/fs.ht ...

  2. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  3. MONGOOSE – 让NODE.JS高效操作MONGODB(转载)

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  4. [Debug] Debug Node.js Application by using Chrome Dev tools

    For example you have a server.js file, and you want to debug some problems; What you can do is: node ...

  5. 前端(Node.js)(1)-- 初识Node.js

    1.认识 Node.js 诞生.发展.应用现状.生态圈等方面 1.1. 2008年 RyanDahl的目标是创建一个易扩展.适用于现代Web应用通信的服务器平台 1.2.国内外的应用情况 Linked ...

  6. Node.js NPM Tutorial

    Node.js NPM Tutorial – How to Get Started with NPM? NPM is the core of any application that is devel ...

  7. 基于Node.js + jade + Mongoose 模仿gokk.tv

    原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 关于gokk 大学的娱乐活动基本就是在寝室看电影了→_→,一般都会选择去goxiazai.cc上看,里面的资源多,质量高 ...

  8. Node.js 入门:Express + Mongoose 基础使用

    前言 Express 是基于 Node.js 平台的 web 应用开发框架,在学习了 Node.js 的基础知识后,可以使用 Express 框架来搭建一个 web 应用,实现对数据库的增删查改. 数 ...

  9. [js高手之路]Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件

    接着这篇文章[js高手之路]Node.js+jade抓取博客所有文章生成静态html文件继续,在这篇文章中实现了采集与静态文件的生成,在实际的采集项目中, 应该是先入库再选择性的生成静态文件.那么我选 ...

随机推荐

  1. IOS常用加密DES

    NSString+DES.h // // NSString+DES.h // haochang // // Created by Administrator on 14-4-15. // Copyri ...

  2. IBM MQ消息中间件jms消息中RHF2消息头的处理

    公司的技术平台在和某券商对接IBM MQ消息中间件时,发送到MQ中的消息多出了消息头信息:RHF2,造成消息的接收处理不正常.在此记录此问题的处理方式. 在IBM MQ中提供了一个参数 targetC ...

  3. git manual

    git init                                                  # 初始化本地git仓库(创建新仓库) git config --global us ...

  4. 【HDOJ】【3480】Division

    DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...

  5. Word2007插入两种页码

    做毕设,摘要,Abstract,目录,第一章,现在想要“摘要,Abstract,目录”编页码“为罗马数字,第一章开始为阿拉伯数字,可以按如下步骤: 1.各部分插入分页符,这与插入两种页码无关,不过是为 ...

  6. 剑指offer--面试题20

    题目:从外向里顺时针打印矩阵 做题心得:该题本质上并未考查复杂的数据结构及算法,而是考查了快速找规律的能力!!! 要想作出此题,必须先有绝对清晰的思路,否则越写越乱(因为涉及到很多的循环打印) 自己当 ...

  7. Leetcode#151 Reverse Words in a String

    原题地址 将单词按空格分词,然后倒序拼接即可 代码: void reverseWords(string &s) { vector<string> words; ; ; ; i &l ...

  8. 如何使用CSL(翻译总结自TI官方文档)

    为了使用CSL来进行编译和连接,必须先配置CCS开发环境. 1.指定目标设备 Project/options/complier/preprocessor,在define symbols中输入设备支持符 ...

  9. AngularJs学习笔记--html compiler

    原文再续,书接上回...依旧参考http://code.angularjs.org/1.0.2/docs/guide/compiler 一.总括 Angular的HTML compiler允许开发者自 ...

  10. Sqli-labs less 56

    Less-56 与less54.55形式是一致的,我们关注sql语句, $sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0 ...