Getting Started with Mongoose and Node.js – A Sample Comments System | Dev Notes
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的更多相关文章
- node.js delete directory & file system
node.js delete directory & file system delete a not empty directory https://nodejs.org/api/fs.ht ...
- mongoose - 让node.js高效操作mongodb
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...
- MONGOOSE – 让NODE.JS高效操作MONGODB(转载)
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...
- [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 ...
- 前端(Node.js)(1)-- 初识Node.js
1.认识 Node.js 诞生.发展.应用现状.生态圈等方面 1.1. 2008年 RyanDahl的目标是创建一个易扩展.适用于现代Web应用通信的服务器平台 1.2.国内外的应用情况 Linked ...
- Node.js NPM Tutorial
Node.js NPM Tutorial – How to Get Started with NPM? NPM is the core of any application that is devel ...
- 基于Node.js + jade + Mongoose 模仿gokk.tv
原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 关于gokk 大学的娱乐活动基本就是在寝室看电影了→_→,一般都会选择去goxiazai.cc上看,里面的资源多,质量高 ...
- Node.js 入门:Express + Mongoose 基础使用
前言 Express 是基于 Node.js 平台的 web 应用开发框架,在学习了 Node.js 的基础知识后,可以使用 Express 框架来搭建一个 web 应用,实现对数据库的增删查改. 数 ...
- [js高手之路]Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件
接着这篇文章[js高手之路]Node.js+jade抓取博客所有文章生成静态html文件继续,在这篇文章中实现了采集与静态文件的生成,在实际的采集项目中, 应该是先入库再选择性的生成静态文件.那么我选 ...
随机推荐
- 动态生成C# Lambda表达式
转载:http://www.educity.cn/develop/1407905.html,并整理! 对于C# Lambda的理解我们在之前的文章中已经讲述过了,那么作为Delegate的进化使用,为 ...
- Windows下查看8080进程及结束进程命令
Windows下查看进程及结束进程命令 1)查看占用8080端口的进程号 >netstat –aon | findstr “8080” 结果:TCP 0.0.0.0:8080 ...
- Netsharp快速入门(之4) 基础档案(之C 实体建模 计量单位、商品、往来单位)
作者:秋时 杨昶 时间:2014-02-15 转载须说明出处 3.3.2 基础档案建模 1.在基础档案项目,右击,选择新建包, 2.录入包的名称,录入名称.完成后点确定 3.3.2.1 计量 ...
- hdu 1853 Cyclic Tour 最小费用最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 There are N cities in our country, and M one-way ...
- Leetcode#166 Fraction to Recurring Decimal
原题地址 计算循环小数 先把负数转化成正数,然后计算,最后添加符号 当被除数重复出现的时候,说明开始循环了,所以用一个map保存所有遇到的被除数 需要考虑溢出问题,这也是本题最恶心的地方,看看通过率吧 ...
- js获得浏览器页面高宽
不同的浏览器可能会有一些差别,使用的时候请先进行测试. var s = ""; s += " 网页可见区域宽:"+ document.body.clientWi ...
- Centos编译安装PHP 5.5笔记
本篇是在 Centos 6.4 32bit 下编译安装 php 5.5.5 的笔记,接上篇 Centos编译安装Apache 2.4.6笔记.php 5.5.x 和 centos 源里面的 php 5 ...
- 跨站点端口攻击 – XSPA(SSPA)
许多Web应用程序提供的功能将数据从其他Web服务器,由于种种原因.下载XML提要,从远程服务器,Web应用程序可以使用用户指定的URL,获取图像,此功能可能会被滥用,使制作的查询使用易受攻击的Web ...
- 【补解体报告】topcoder 634 DIV 2
A:应该是道语文题,注意边界就好: B:开始考虑的太复杂,没能够完全提取题目的思维. 但还是A了!我愚蠢的做法:二分答案加暴力枚举, 枚举的时候是完全模拟的,比如每次取得时候都是从大到小的去取,最后统 ...
- HDOJ 1028 Ignatius and the Princess III (母函数)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...