NodeJS + MongoDB + Express 搭建步骤
来源:互联网 发布:宏源证券交易软件 编辑:程序博客网 时间:2024/06/05 04:09
转载出处:http://blog.sina.com.cn/s/blog_777f59990101p1no.html
以下内容仅为Windows下的搭建
-----------------------------------------------------------------------------------------------
2、改系统系统环境变量(要是忘了怎么改自行百度)
- ...\nodejs (此路径为nodejs安装的路径)
3、装Express
- PS:-g 表示全局,所以打开命令行窗口既输入以下命令
npm install -g express
4、创建项目
- 建一个工作区,即某盘下的文件夹,如:nodedemo
- 进入工作区文件夹,建express项目:
express -e myproject
- node_modules:存放所有的项目依赖库。(每个项目管理自己的依赖,与Maven、Gradle等不 同)
- package.json:项目依赖配置及开发者信息
- app.js:程序启动文件
- public:静态文件(css、js、img)
- routes:路由文件(MVC中的C,controller)
- views:页面文件(ejs模板)
之前下载的express貌似有点问题,重新在本项目里面下载一个:
npm install express
此时在myproject目录下也存在了node_modules目录,同时保存了express程序包。
程序运行之后就会出现以下的提示信息:
Express server listening on port 3000
表示在3000的端口监听。随后打开浏览器输入:
http://localhost:3000
5、安装ejs
- 在myproject目录下:
npm install ejs
6、安装supervisor组件包
现在有一个小小的问题出现了,如果要想运行Node.js程序,则现在只能够使用“node app.js”,而这样的运行方式,如果在app.js文件修改之后往往需要重新启动才可以加载新的内容,这对于开发是非常不方便的, 为此,可以使用一个supervisor组件包,它可以动态的加载修改之后的开发程序。
- 下载supervisor
npm install -g supervisor
- 进入项目目录,利用supervisor运行程序:
supervisor app.js
7、开始编写代码阶段
本次要开发一个简单的登录程序,而这个用户登录程序,也分为两个开发步骤完成:第一步:是固定的用户名和密码完成、第二步:是基于MongoDB进行的登录开发。
- EJS是WEB的模板引擎之一。EJS是一个JavaScript模板库,用来从JSON数据中生成HTML字符串。可以方便地给出用户明确、维护性良好的HTML代码结构。
- 修改模板文件配置
var ejs = require('ejs') ; // require()函数表示要加载的模块
app.engine('html',ejs.__express) ;app.set('view engine', 'html'); // 替换:app.set('view engine', 'ejs');
- 下面编写一个用户的登录,登录的时候只提供用户id(userid)和密码,下面建立几个相关的操作页面:login.html、welcome.html。但是在建立这两个文件的时候,请一定要注意,文件的编码必须设置为UTF-8,否则无法操作中文。
范例:定义login.html
<!DOCTYPE html><html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1><form method="post"> 用户ID:<input type="text" name="userid" id="userid"><br> 密 码:<input type="password" name="password" id="password"><br> <input type="submit" value="登录"> <input type="reset" value="重置"></form></body></html>
范例:定义欢迎页
<!DOCTYPE html><html> <head> <title>Welcome</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1>欢迎<%=user.userid%>光临!</h1> <h1><a href="logout">注销</a></h1> </body></html>
范例:修改index.html页面,增加登录的链接地址
<!DOCTYPE html><html> <head> <title><%= title %></title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= title %></h1> <p><a href="login">用户登录</a></p> </body></html>
- 设计路由功能
本登陆程序通过以下的几个页面完成:
- 访问路径:/,页面:index.html,不需要登陆,可以直接访问
- 访问路径:/welcome,页面:welcome.html,必须用户登陆后,才可以访问
- 访问路径:/login,页面:login.html,登陆页面,用户名密码输入正确,自动跳转到home.html
- 访问路径:/logout,页面:无,退出登陆后,自动回到index.html页面
修改app.js:
app.get('/', routes.index);app.get('/login', routes.login); // 此处还需要routes/index.js修改app.post('/login', routes.doLogin); // 处理post请求,表单提交app.get('/logout', routes.logout); // 处理注销app.get('/welcome', routes.welcome); // 进入到首页
注:get为get请求,post为post请求,all为所有针对这个路径的请求
而这5个操作路径配置完成之后,还需要找到routes/index.js文件进行相关的回调函数的配置操作。
范例:修改index.js文件
exports.index = function(req, res){ res.render('index', { title: 'Express' });};exports.login = function(req, res){ res.render('login', { title: '用户登录' });};exports.doLogin = function(req, res){ var user = {userid:'mldnadmin' , password:'hellojava'} ; // 固定数据 // 如果要想接收请求,通过req对象 if (req.body.userid==user.userid && req.body.password==user.password) { res.redirect("/welcome?uid=" + req.body.userid) ; // 地址重写 } res.redirect("/login") ;};exports.logout = function(req, res){ res.render('login', { title: '用户注销' });};exports.welcome = function(req, res){ // 如果是地址栏参数使用req.query.参数名称接收 var user = { userid : req.query.uid } res.render('welcome', { title: '程序首页' , user:user });};那么在整个的基础过程之中,最为重要的步骤就配置app.js中的路由,当然,路由的最终控制是通过index.js文件完成的,在这个文件就相当于Java中的Servlet功能,负责跳转。
8、利用MongoDB来解决数据库的登录问题
MongoDB可以说是在以后未来发展之中,在中小型数据库的市场上一定是具备发展优势的数据库。而且与Node.js的结合也非常的方便,并且多种多样。
MongoDB和Oracle数据库完全是不一样的操作结构:MongoDB使用的是文档存储,而Oracle采用的是表存储。
MongoDB和Oracle数据库完全是不一样的操作结构:MongoDB使用的是文档存储,而Oracle采用的是表存储。
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案;
MongoDB采用NoSQL技术,以文档的方式进行存储。
SQL:作为整个数据库的开发标准已经存在了几十年了,可是NoSQL技术最早的提出指的是不使用SQL使用。但是后来发现不能够离开SQL,所以NoSQL又被翻译为:Not Only SQL(不仅SQL)。
下载MongoDB:http://www.mongodb.org/
- 配置MongoDB
将下载的压缩包直接进行解压缩,解压缩目录为d:/mongodb;
将D:\mongodb\bin配置到操作系统的PATH属性之中;
下载下来的MongoDB是一个*.zip文件,直接将其解压缩后就可以使用了。但是在使用之前,还需要为其进行path环境的配置:D:\mongodb\bin。
以后使用mongodb暂时将其定义为在d盘上,所以现在需要在d盘上建立一个data/db的文件目录。
随后打开一个新的命令行窗口,让路径设置在d盘路径下,首先启动mongodb服务:
随后打开一个新的命令行窗口,让路径设置在d盘路径下,首先启动mongodb服务:
mongod.exe
输出结果:
Wed Aug 14 16:13:19.739 [initandlisten] MongoDB starting : pid=4344 port=27017 dbpath=\data\db\ 32-bit host=cab34d4eb860431
- 创建数据库及users文档
输入mongo.exe命令,启动mongodb数据库;
创建数据库名称(mydb):
use mydb;
创建新的users文档(userid、name、password)同时设置数据:
db.users.insert({userid:'me',name:'yexinxie',password:'hello'});
db.users.insert({userid:'me2',name:'xiexiaoha',password:'nodejs'});
此时可以通过show tables查看所有的集合,已经发现存在了users集合。下面查询全部:
db.users.find();
可是如果现在直接利用node.js提供的mongodb操作不方便使用。
- 安装mongoose
mongoose提供了一种更加方便的通过Node.JS访问MongoDB的操作,如果直接使用MongoDB直接操作数据库,可能会出现"db object already connecting,open cannot be called multiple time"错误信息,主要原因是必须首先open()打开数据库,而后必须使用close()关闭数据库,而对于异步处理不好时(就算处理的再好也一样)出现此类错误。
npm install express-mongoose
此组件可以和express组件完美的搭档。
还需要下载一个mongoose的组件:
npm install mongoose
- 实现数据库验证
当mongodb配置完成之后,下面就首先需要定义一个与Users集合有关的新的组件。类似于VO类的概念,只不过现在这个类需要通过*.js文档描述,在routes目录下创建models.js文件。
由于此处要进行数据库操作,所以先根据users数据表创建一个模型,此模型名称为models.js文件,文件内容如下:
var mongoose = require('mongoose') ; // 定义使用组件var Schema = mongoose.Schema ; // 创建模式var UserSchema = new Schema({ userid : String , name : String , password : String}) ; // 定义了一个新的模式,但是此模式还未和users集合有关联exports.User = mongoose.model('User',UserSchema) ; // 与Users表关联
修改index.js文件,操作数据库:
var mongoose = require('mongoose') ; // 导入组件var models = require('./models') ; // 导入自定义组件var User = models.User ; // 使用User模型,对应的users表mongoose.connect('mongodb://localhost/mydb') ; // 连接数据库
现在最需要改变的就是doLogin操作,因为此处需要使用数据库验证。
如果要想完成登录验证,只需要根据用户名和密码取得数据量即可。
db.users.count({userid:'me',password:'hello'});
只需要根据返回的数量就可以确定用户名和密码是否正确。
exports.doLogin = function(req, res){ // 现在拼凑出了一个基本的字符串 var query_doc = {userid:req.body.userid , password:req.body.password} ; // 固定数据 User.count(query_doc,function(err,doc){// 直接利用mongodb的命令进行操作 if(doc == 0) { // 输入错误,没有此信息 res.redirect("/login") ; } else { // 成功 res.redirect("/welcome?uid=" + req.body.userid) ; // 地址重写 } }) ;};
而且最为关键的是整个过程之中,不再去考虑数据库的关闭问题,极大的方便了用户开发。
9、总结
可以发现,如果要实现Node.JS + MongoDB开发,最为痛苦的地方就是各个组件包的管理,而且最麻烦的是Node.JS之中有上万个组件包。
使用这种轻量的开发方式绝对要比PHP + MySQL更加强大。
0 0
- NodeJS + MongoDB + Express 搭建步骤
- nodejs+express+mongodb搭建网站
- 阿里云搭建NODEJS+EXPRESS+MONGODB实战
- nodejs/express+mongodb/mongoose
- nodejs+express+mongodb
- nodejs+express+mongodb安装
- nodejs+express+mongodb入门
- Nodejs Express 连接Mongodb
- NodeJS+Express+MongoDB
- NodeJS+Express+MongoDB
- nodejs + express + ejs + mongodb本地环境安装及搭建
- Nodejs——搭建电影展示平台(Express+MongoDB)
- [NodeJs] Express + Mongodb + Materialize 搭建多人博客
- nodejs-express环境搭建
- Nodejs,express博客搭建
- NodeJS+Express+mongoDB简单测试
- nodejs(express)链接操作mongodb
- 使用nodejs、mongodb、express、linux搭建社区网站(4)-mongodb连接及注册的开发
- 在线学习诱惑大!!
- uva12538 Version Controlled IDE(可持续化Treap * 模板, STL ext/rope(块状链表))
- ARM汇编指令-STMFD和LDMFD
- mysql 检索数据库中包含某几个字段的表 & 检索表名称包含某些字符的表
- Ganymed SSH-2 for Java系列11之SCPClient
- NodeJS + MongoDB + Express 搭建步骤
- ttf字库瘦身,只保留自己想要的字
- java synchronized详解
- 零基础学小议LLVM
- JAVA中的向上转型与向下转型
- javaweb程序中,普通的java类,不是servlet类读取资源文件的方式
- cocos2d-x 多点触控总结
- pat advanced 1013
- 【面试题】输出数组的问题