Blog icon indicating copy to clipboard operation
Blog copied to clipboard

Node+Mongodb+Express简单例子

Open ychow opened this issue 10 years ago • 0 comments

好久没更新blog了,其实也不知道到底该写写什么,恰好最近在学习node还有一大堆新玩意儿,就随便写写吧。

谈谈安装

  • Node的安装在这里就不说了,还不知道怎么搞定的,可以看看官网 --> https://nodejs.org
  • Express 的安装可以直接使用命令 npm install -g express ,安装完成后,可以输入命令 express -V 查看当前 express 的版本号
  • 你可以使用命令 npm install mongodb 或是去 Mongodb 的官网(https://www.mongodb.org/)下载安装包。这里我推荐后者,前者具体原因在这里我就不说了。安装包下载好后,下一步下一步... 安装好后,使用cmd进入mongodb安装目录,而且是 bin 目录下!
  • 最后我们还需要安装 Mongoose 命令: npm install -g mongoose

创建项目

我们使用cmd进入到你想创建项目的位置,然后输入命令 express 你的项目名称 这时候会提示你 destination is not empty 直接输入 y 然后回车即可。

express

Express默认 HTML 模板采用的是 Jade ,当然你也可以使用其他的模板。

目前 Express 已为我们新建了一个基础的前端架子,我们可以使用命令: npm install 来下载需要用到的模块。 npm start 来启动项目。项目默认地址是:http://localhost:3000/ 。

数据库相关

我们先在项目目录下新建一个文件夹用来存放该项目的数据库(这里新建了一个db文件)。 使用cmd 进入Mongodb 安装目录下的bin目录 ,输入命令:mongod --dbpath F:\test\db 这样数据库就连接上了。

我们在另开一个cmd 同上进入bin目录,然后输入命令:

  • mongo //进入数据库
  • use test //创建项目数据库
  • db.createCollection("users") //创建一个集合,也就是表
  • db.users.insert({userid: "admin", password: "123456"}) //给users里添加一个文档,也就是一条记录账号admin,密码123456
  • db.users.find() //如果看到你刚刚添加的文档记录,就ok咯

项目文件

  • 在models下创建一个user.js,作为实体类映射数据库的users集合

var mongoose = require("mongoose");  //  顶会议用户组件
var Schema = mongoose.Schema;    //  创建模型
var userScheMa = new Schema({
    userid: String,
    password: String
}); //  定义了一个新的模型,但是此模式还未和users集合有关联
exports.user = mongoose.model('users', userScheMa); //  与users集合关联

  • 在views下面建index.jade,login.jade, logout.jade, homepage.jade 。 (index是自带的,不用建)

Index.jade


extends layout

block content
    h1 Hello,Express !
    a(href='/login') 登陆 

Login.jade


extends layout

block content

    form(action="homepage" method="post")
        p
            span
                |用户名:
            br
            input(id="userid" name="userid" type="text")

        p
            span 密码:
            br
            input(id="password" name="password" type="password")

        p
            span 年龄:
            br
            input(id="age" name="age" type="text")

        p
            span 备注:
            br
            textarea(id="beiz" name="beiz")

        p
            input(type="submit" value="提交")


Logout.jade


extends layout




block content

    p 正在登出...

    script(src="/javascripts/out.js")



Homepage.jade

extends layout

block content

    p
        a(href="/logout") 登出
  • 在routes下的index.js配置路由,也就是请求映射处理
var express = require('express');
var router = express.Router();
var mongoose=require('mongoose');
var user=require('../models/user').user;
mongoose.connect('mongodb://localhost/nodes');




/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Index' });
});

/* GET login page. */
router.get('/login', function(req, res, next) {
  res.render('login', { title: 'login' });
});

/* GET logout page. */
router.get('/logout', function(req, res, next) {
  res.render('logout', { title: 'logout' });
});

/*hompage*/
router.post('/homepage', function(req, res) {
    console.log(req);
    var query_doc = {name: req.body.name, password: req.body.password};
    (function(){
        user.count(query_doc, function(err, doc){
            if(doc == 1){
                console.log(query_doc.name + ": login success in " + new Date());
                res.render('homepage', { title: 'homepage' });
            }else{
                console.log(query_doc.name + ": login failed in " + new Date());
                res.redirect('/');
            }
        });
    })(query_doc);
});


module.exports = router;

ok,简单的例子就大功告成啦!

对于入门非常不错的:

ychow avatar Sep 08 '15 09:09 ychow