nodejs+mongodb做项目的详解

想写博客很长时间了,因为一直身患懒癌,所以一直拖到了现在。markdown的语法也是刚刚学,试验一下效果
好了不说了,直接上干货了。
------------------------------------------------------------------------------------------------
##1.准备工作##

Nodejs、express和mongodb的安装(这里安装的都是最新版的)

###安装:###
Nodejs的安装没什么说的。不过安装完之后测试是否成功用过原来版本的同学可能会有一些问题。
原来的版本是:$ node -v 新版不在支持$,直接在命令行中:node -v

安装最新版的express之后,需要在安装:express-generator //express命令工具,很多初学者都会遇到这个问题(当然我也是)
mongodb的安装下面会讲解到。

###用express创建一个项目的框架。###

这个我创建一个名字叫chihou的网站,用的模板引擎是ejs。

>express -e chihuo

-e表示ejs模板引擎,不写 -e 默认的创建jade模板引擎

然后在输入:
cd chihuo //进入到你创建的项目目录
npm install //读取根目录中的package.json文件然后安装项目所依赖的包

然后通过cmd命令行 cd 到 chihuo 的目录下
>node app

这样就启动项目了。

提示1:如果不能启动项目:看看app.js文件中没有监听端口。如果没有,
在 module.exports = app; 语句之前添加app.listen(3000);

提示2:Ctrl + c 终止运行

然后我们可以在浏览器地址栏里敲入 http://127.0.0.1:3000/ 或者 http://localhost:3000
这就是你的第一个express创建的node app。

到这里你就完成了项目的重要的一步。

之后的讲解 我们从目录开始

--node_modules 项目中依赖的包
--public 公共资源放的目录
--routes 学名 路由,里面放着一些路由文件
--views 放着就是页面文件了
--app.js 项目的入口文件。当然你也可以改成其他的名字。

##2.现在基本的结果已经有了,之后就是创建数据库了

###mongodb的安装

这里只介绍window的安装
在官网上下载zip,这个我装在D盘的mongodb目录下

1.在D盘中创建mongodb文件夹然后把下载的包解压后把其中的bin文件夹拷贝到创建的mongodb文件夹中,
2.然后在mongodb文件夹中创建一个data文件夹,再在data文件夹中创建db文件夹
3.打开CMD命令行
>d:
>cd mongodb\bin
>mongod -dbpath D:\mongodb\data\db
4.在打开一个CMD命令行:
>d:
>cd mongodb\bin
>mongo
5.这样就可以用了。

接着就设计我们的数据库了

在刚才的打开的mongodb数据库中输入:
>use chihuo \\创建一个叫chihuo的数据库
>db.createCollection("users") \\创建一个集合
>db.users.insert({"name":"admin","password":"111"}) \\给users集合添加一个文档。
>db.find() \\查询你添加的文档

再接着就是在项目中连接刚才创建的数据库了

在项目根目录下创建一个的文件夹database,然后在创建一个
db.js

1 var mongoose = require(‘mongoose‘);
2 var db = mongoose.createConnection(‘mongodb://localhost/chihuo‘);//;连接数据库
3 var Schema = mongoose.Schema; // 创建模型
4 var userScheMa = new Schema({
5 userid: String,
6 password: String
7 }); // 定义了一个新的模型,但是此模式还未和users集合有关联
8 exports.user = mongoose.model(‘users‘, userScheMa); // 与users集合关联

##3.接着在views文件夹创建视图文件了##

我们上面用express创建的项目视图文件是ejs后缀名,我们一般习惯使用html后缀名。
那么我们怎么让他识别html的视图文件呢?

在app.js文件中 找到
>app.set(‘view engine‘, ‘ejs‘);
把它替换成:
>app.set( ‘view engine‘, ‘html‘ );
再用app.engine()方法注册模板引擎的后缀名。代码:
>app.engine(‘.html‘,require(‘ejs‘)._express);

然后我们创建一个login.html(登陆页面),index.html(原来有,改一下后缀名就行),ucenter(登陆之后的页面);

l

 1 ogin.html
 2 <!DOCTYPE html>
 3 <html>
 4 <head>
 5   <title><%= title %></title>
 6   <link rel=‘stylesheet‘ href=‘/stylesheets/style.css‘ />
 7 </head>
 8 <body>
 9   <h1>Hello World</h1>
10   <p>Welcome to <%= title %></p>
11   <form action="ucenter" method="post">
12     <p>
13       <span>name:</span>
14       <br>
15       <input id="name" name="name" type="text">
16     </p>
17     <p>
18       <span>password:</span>
19       <br>
20       <input id="password" name="password" type="password">
21     </p>
22     <p><input type="submit" value="submit"></p>
23   </form>
24 </body>
25 </html>
 1 index.html
 2 <!DOCTYPE html>
 3 <html>
 4 <head>
 5   <title><%= title %></title>
 6   <link rel=‘stylesheet‘ href=‘/stylesheets/style.css‘ />
 7 </head>
 8 <body>
 9   <h1>Hello World</h1>
10   <p>Welcome to <%= title %></p>
11   <p><a href="login">登陆</a></p>
12 </body>
13 </html>
ucenter.html
<!DOCTYPE html>
<html>
<head>
  <title><%= title %></title>
  <link rel=‘stylesheet‘ href=‘/stylesheets/style.css‘ />
</head>
<body>
  <h1>Hello World</h1>
  <p>Welcome to <%= title %></p>
  <p>你已经登陆</p>
</body>
</html>

##4.最后就是路由的控制了,在routes文件中的index.js##

 1 var express = require(‘express‘);
 2 var router = express.Router();
 3 var user = require(‘../database/db‘).user;
 4
 5
 6 /* GET home page. */
 7 router.get(‘/‘, function(req, res) {
 8   res.render(‘index‘, { title: ‘index‘ });
 9 });
10
11 /*login*/
12 router.get(‘/login‘, function(req, res) {
13   res.render(‘login‘, { title: ‘login‘ });
14 });
15
16 /*ucenter*/
17 router.post(‘/ucenter‘, function(req, res) {
18   var query = {name: req.body.name, password: req.body.password};
19   (function(){
20     user.count(query, function(err, doc){
21       if(doc == 1){
22         console.log(query.name + ": 登陆成功 " + new Date());
23         res.render(‘ucenter‘, { user:doc });
24       }else{
25         console.log(query.name + ": 登陆失败 " + new Date());
26         res.redirect(‘/‘);
27       }
28     });
29   })(query);
30 });
31
32 module.exports = router;

目前就讲解这么多,之后的博客我会讲解最新版本的session问题还有前台页面中应用到bootstrap等等,不断的把项目完善。

github地址:https://github.com/songtanjichuan/chihuo_0.0.1.git

mongoose参考地址:http://www.hubwiz.com/course/543b2e7788dba02718b5a4bd

时间: 2024-07-30 20:19:07

nodejs+mongodb做项目的详解的相关文章

node.js + mongodb 做项目的详解(二)

这次内容是结合bootstrap把登陆注册做好,还有就是express的中间件等问题. 看这篇博客之前建议先看我上篇写的那篇博客http://www.cnblogs.com/hubwiz/p/4118083.html 第一步 当然还是准备工作了,在bootstrap官网下载好需要的东西了,怎么用官网已经写的很详细,在这就不细说了.下载地址:http://v3.bootcss.com/getting-started/ 直接上代码吧. index.html <!DOCTYPE html> <

MongoDB各种查询操作详解

这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可以实现全部和部分查询. 1.查询全部 空的查询文档{}会匹配集合的全部内容.如果不指定查询文档,默认就是{}. 2.部分查询 3.键的筛选 键的筛选是查询时只返回自己感兴趣的键值,通过指定find的第二个参数来实现.这样可以节省传输的数据量,又能节省客户端解码文档的时间和内存消耗. 查询时,数据库所关心

开源项目MultiChoiceAdapter详解(五)——可扩展的MultiChoiceBaseAdapter

上次写到了开源项目MultiChoiceAdapter详解(四)——MultiChoiceBaseAdapter的使用,其实我们仍旧可以不使用ActionMode的,所以这里就写一个自己扩展的方法. 一.布局文件 listview_normal_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

开源项目MultiChoiceAdapter详解(六)——GridView和MultiChoiceBaseAdapter配合使用

这篇其实没啥重要的,主要就算是个总结吧. 一. 这里实现的是类似于上图的多图选择的效果.关键在于item布局文件的写法.这也就是这个框架奇葩的一点,莫名其妙的要在一个自定义控件里面再放一个自定义的控件,如果不这样就出不了选中的效果.分析下原因是这里整个item被图片所覆盖了,仅仅设置一个有选择效果的父控件会被图片所覆盖,所以还得用一个可以选中的iamgeview进行替换imageview. 下面就是这个布局文件 item_gridview.xml <?xml version="1.0&qu

开源项目使用详解过程

开源项目使用详解过程Q-Q:971-041-894定位[手機系列找回刪除等信息]这件事说来也是巧了,也算是他们上级领导的矛盾吧,因为公司与另一个公司之前有一点合同上的纠葛,所以老板在发函以前之前让我跟对方公司现承认一下,看是不是真的要闹到这个地步,因为我是担任这个项目的,相对在状况上回对比的了解,那个时分我刚好在外面,所以只能用自己的手机打以前了,这也没什么,不便是知会一声吗,当然的,两头的利益不是那么快就可以到达的,所以发函这个工作仍是进行了请问我的苹果5s手机被偷关还能机么定位吗.手机没电话

新浪微博客户端项目之项目主体结构详解

程序的运行流程: IWeiboActivity接口: 1.  init()方法 完成初始化 2,  refresh(Objet ...args)方法 完成窗体刷新 Task任务类: 定义程序中的任务 如:登录,发表新微博,获取用户微博,获取用户详细信息等各种任务 int taskId//当前任务的ID Map params //当前任务的参数 MainService(核心控制类) 1. MainService的主要功能 完成程序调度 接收UI层数据(任务),完成业务逻辑,返回信息,更新UI 在后

Cocos2d-x手机游戏开发与项目实践详解_随书代码

Cocos2d-x手机游戏开发与项目实战详解_随书代码 作者:沈大海  由于原作者共享的资源为UTF-8字符编码,下载后解压在win下显示乱码或还出现文件不全问题,现完整整理,解决所有乱码问题,供大家下载. 下载地址:http://download.csdn.net/detail/oyangyufu/7665049 Cocos2d-x手机游戏开发与项目实践详解_随书代码

NodeJS写日志_Log4js使用详解

今天和大家分享一下NodeJS中写日志的一个常用第三方包:Log4js. 跟随主流Blog特色,先简单介绍下Log4js的基本信息.介绍Log4js之前,需要先说一下Log4***,Log4***是由Apache提供的多平台下多语言下日志书写扩展包,目的很简单就是使日志书写更加方便简洁,同时对不同的业务日志能够进行灵活的分文件记录,同时也包含着详细的等级配置,为之后分级输出,检索,及程序自动解析提供更加便捷的支持(一家之言,非官方描述,领会精神).Log4***有很多语言的实现,比如Log4cp

mysql二进制日志详解及备份恢复、基于mysqldump及lvmsnapshot做备份恢复详解

二进制日志: 时间点恢复 复制 20140411 回顾: 日志文件:6类 一般查询日志:log, general_log, log_output 慢查询日志: 错误日志 二进制日志 中继日志 事务日志 二进制日志:"修改" position:位置 time: 时间 滚动: 1.大小 2.时间 二进制日志的功用: 即时点恢复: 复制: mysql> SHOW MASTER STATUS; mysql> FLUSH LOGS; mysql> SHOW BINARY LOG