node.js + 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.users.find() \\查询你添加的文档
再接着就是在项目中连接刚才创建的数据库了
在项目根目录下创建一个的文件夹database,然后在创建一个
db.js
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/chihuo');//;连接数据库
var Schema = mongoose.Schema; // 创建模型
var userScheMa = new Schema({
name: String,
password: String
}); // 定义了一个新的模型,但是此模式还未和users集合有关联
exports.user = db.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(登陆之后的页面);
login.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>
<form action="ucenter" method="post">
<p>
<span>name:</span>
<br>
<input id="name" name="name" type="text">
</p>
<p>
<span>password:</span>
<br>
<input id="password" name="password" type="password">
</p>
<p><input type="submit" value="submit"></p>
</form>
</body>
</html>
index.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><a href="login">登陆</a></p>
</body>
</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
var express = require('express');
var router = express.Router();
var user = require('../database/db').user; /* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'index' });
}); /*login*/
router.get('/login', function(req, res) {
res.render('login', { title: 'login' });
}); /*ucenter*/
router.post('/ucenter', function(req, res) {
var query = {name: req.body.name, password: req.body.password};
(function(){
user.count(query, function(err, doc){
if(doc == 1){
console.log(query.name + ": 登陆成功 " + new Date());
res.render('ucenter', { user:doc });
}else{
console.log(query.name + ": 登陆失败 " + new Date());
res.redirect('/');
}
});
})(query);
}); module.exports = router;
目前就讲解这么多,之后的博客我会讲解最新版本的session问题还有前台页面中应用到bootstrap等等,不断的把项目完善。
github地址:https://github.com/songtanjichuan/chihuo_0.0.1.git
mongoose参考地址:http://www.hubwiz.com/course/543b2e7788dba02718b5a4bd
如果觉得还不错,求推荐。转载的话,请加原文链接。
node.js + mongodb 做项目的详解(一)的更多相关文章
- node.js + mongodb 做项目的详解(二)
这次内容是结合bootstrap把登陆注册做好,还有就是express的中间件等问题. 看这篇博客之前建议先看我上篇写的那篇博客http://www.cnblogs.com/hubwiz/p/4118 ...
- 8 步搭建 Node.js + MongoDB 项目的自动化持续集成
任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...
- Node.JS + MongoDB技术浅谈
看到一个Node.JS + MongoDB的小样例,分享给大家.魔乐科技软件学院(www.mldnjava.cn)的讲座 Node.JS + MongoDB技术讲座 云计算 +大数据 ...
- AngularJS + Node.js + MongoDB开发
AngularJS + Node.js + MongoDB开发的基于位置的通讯录(by vczero) 一.闲扯 有一天班长说了,同学们希望我开发一个可以共享位置的通讯录,于是自己简单设计了下功能.包 ...
- node.js+mongodb 爬虫
demo截图: 本demo爬瓜子二手车北京区的数据 (注:需要略懂 node.js / mongodb 不懂也没关系 因为我也不懂啊~~~) 之所以选择爬瓜子二手车网站有两点: 一.网站无需登录,少做 ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...
- 用Node.JS+MongoDB搭建个人博客(页面模板)(五)(结束)
<差不多先生> 我是差不多先生,我的差不多是天生.也代表我很天真,也代表我是个闲人.这差不多的人生,总是见缝插针. 求学的道路上总是孤独的,即使别人不理解我,认为我是奇葩!但没关系,我会坚 ...
- 开源项目MultiChoiceAdapter详解(三)——MulitChoiceNormalArrayAdapter的使用
MulitChoiceNormalArrayAdapter是我自己定义的一个类,其实就是实现了MulitChoiceArrayAdapter,为什么做这个简单的实现类呢,因为这样我们在不用Action ...
随机推荐
- 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)
该书英文配套答案 Answer to Exercise -, page Revise the main routine of the longest-line program so it will c ...
- Visual Studio 2010中的stdafx.h和targetver.h两个头文件是有什么用?
来自百度~stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行. Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程 ...
- 10条建议提高PHP代码性能
这篇文章中的建议涵盖了大部分PHP代码性能方面的问题.如果你是做一些小网站或者小项目,那么有理由忽略这些建议,但是当你为大量用户提供长期稳定的服务的时候,就必须关注了.开发人员必须从项目一开始就考虑这 ...
- android user build serial console
在 init.rc 里有一段 on property:ro.debuggable=1 start console 当user debug时 ro.debuggable=0,console 不会被启动 ...
- MQTT协议简记
MQTT - MQ Telemetry Transport 轻量级的 machine-to-machine 通信协议. publish/subscribe模式. 基于TCP/IP. 支持QoS. ...
- Java语法糖2:自动装箱和自动拆箱
前言 一开始想学学自动拆箱和自动装箱是被这个名字吸引到,听上去好像很高端的样子,其实自动拆箱.自动装箱是很简单的内容. 自动拆箱和自动装箱 Java为每种基本数据类型都提供了对应的包装器类型.举个例子 ...
- SQLServer 随机生成指定范围的日期
一个分页的问题,DTCms3.0中,分页是根据时间分页的,如果当添加时间(add_time)都是同一个数值时,不管点击第几页,显示的数据都是同一个的内容,于是就有了需要把同一个时间改指定随机日期的功能 ...
- mysql --prompt
mysql --prompt修改命令行链接mysql时的提示符,shell脚本示例如下 #!/bin/bash in crm) cmd='mysql -h192.168.1.2 -uroot -pro ...
- 扩展GridView控件——为内容项添加拖放及分组功能
引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...
- NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇
背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...