Skip to content

Node+Mongodb+Express简单例子 #17

Description

@ychow

好久没更新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,简单的例子就大功告成啦!

对于入门非常不错的:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions