ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Jun 27

[Javascript][Node.js][express]mongodbと連携させてみる

by zuqqhi2 at 2013年6月27日
Pocket

mongodbを使って値の保存、読み出しを使ったプログラムを作成してみる。

まずは
expressを使用してひな形を作成する。

$express -e firstapp

   create : firstapp
   create : firstapp/package.json
   create : firstapp/app.js
   create : firstapp/public
   create : firstapp/public/javascripts
   create : firstapp/public/images
   create : firstapp/public/stylesheets
   create : firstapp/public/stylesheets/style.css
   create : firstapp/routes
   create : firstapp/routes/index.js
   create : firstapp/routes/user.js
   create : firstapp/views
   create : firstapp/views/index.ejs

   install dependencies:
     $ cd firstapp && npm install

   run the app:
     $ node app
$npm install
$npm install mongose

次にmongodbとの接続に使用するモデルを作成する。

var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/mongotest');

function validator(v) {
    return v.length > 0;
}

var Post = new mongoose.Schema({
    ua    : { type: String, validate: [validator, "Empty Error"] },
    created : { type: Date, default: Date.now }
});

exports.Post = db.model('Post', Post);

これでmongoの接続ができるようになった。

次にルーティングの部分を記述する。

/*
 * GET home page.
 */
var model = require('../model');
var Post = model.Post;

exports.index = function(req, res) {
    Post.find({}, function(err, items) {
        res.render('index', { title: 'Entry List', items: items , num: items.length, ua : JSON.stringify(req.headers['user-agent']) })
    });
};

exports.create = function(req, res){
    console.log(req.body);
    var newPost = new Post(req.body);
    newPost.save(function(err){
        if (err) {
            console.log(err);
            res.redirect('back');
        } else {
            res.redirect('/');
        }
    });
};

app.jsにルートを登録する。

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 8080);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

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

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

最後にトップのビューを作成する。

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <form method="POST" action="/create">
        <input type="hidden" name="ua" value="<%= ua %>">
        <input type="submit" value="Post" text="New Entry">
    </form>
    <br />
    <h2>Num Access : <%= num %></h2>
    <table border="1">
        <% items.forEach(function(item){ %>
            <tr>
                <td><%= item.created %></td>
                <td><%= item.ua %></td>
            </tr>
        <% }) %>
    </table>
  </body>
</html>

完成!!
これで、node app.jsをすると

mongotest-result

Related Posts

Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.