zoukankan      html  css  js  c++  java
  • 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 tutorial so 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
    Screen Shot

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

  • 相关阅读:
    在ASP.NET中使用FusionCharts图表
    IE 输入baidu就死掉
    以WebServices方式上传图片
    GUID System.Guid .
    记录一个静态类的静态属性
    [转]通用分页存储过程
    如何解决“呈现控件时出错”的问题
    C#中调用SQL存储过程(带输入输出参数的例子)
    Rose实例:构造银行业务模型[转]
    Mylove net 我们手里的金钱只是保持自由的一种工具!卢梭
  • 原文地址:https://www.cnblogs.com/wangwenfei/p/monogodb.html
Copyright © 2011-2022 走看看