迫于学校的压力,研二上准备回学校作实验发论文了,感受真的没意思,这几天学着搞搞后端,踩了不少坑,整理一下这几天的坑以避免之后再犯!html
demo目录如图废话很少说,下面从零开始~
前端
参考资料:七天学会NODEJSnode
JS是脚本语言,脚本语言都须要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于须要独立运行的JS,NodeJS就是一个解析器。git
每一种解析器都是一个运行环境,不但容许JS定义各类数据结构,进行各类计算,还容许JS使用运行环境提供的内置对象和方法作一些事情。例如运行在浏览器中的JS的用途是操做DOM,浏览器就提供了document
之类的内置对象。而运行在NodeJS中的JS的用途是操做磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs
、http
等内置对象。github
https://nodejs.org/en/从左侧官网下载到mongodb
一直next就好这步最好选择Add to Path,方便系统找到你后续安装的模块包数据库
安装完后能够在cmd中经过右侧代码测试express
稍微介绍一下npm把,前端的小伙伴多多少少听过可是可能不清楚是什么,npm就是后端的包管理工具,能够直接在命令行输入命令为项目添加模块,功能十分强大,nodejs在安装的时候已经自动安装了npm。(前端有相似的bower)npm
本DEMO咱们须要经过npm安装下面几个模块后端
1:express (帮咱们快速完成nodejs开发的框架) 2:mongoose(mongodb的速成框架)
安装方式如图(xxx就是所须要安装的模块,够简单把)
你们自行安装一下express和mongoose模块
http://www.expressjs.com.cn/
上边是express框架的官网,简洁明了~你们能够看看~
咱们经过express的应用生成器快速生成咱们DEMO的目录!在CMD中输入以下两行命令完成在当前工做目录下建立一个命名为 demoname 的应用。
npm install express-generator -g $ express demoname //demoname就是你给项目的名字
咱们找到生成的目录
打开app.js把里面东西都删掉,对咱们的DEMO来讲里面多余的东西太多,把下面的内容替换进去~而后把大家前端的静态内容CSS,IMG,JS等等都放到Public文件夹里面!
var express = require('express'); //引入express模块 var path = require('path'); //引入path模块为了指向静态资源 var port = 80; //指定端口变量的值 var app = express(); //app这个Object表示express应用 var mongoose = require("mongoose"); //引入mongoose模块 var db = mongoose.connect("mongodb://127.0.0.1:27017/player"); //指定mongodb链接的数据库地址,格式为mongoose(“mongodb://user:pass@localhost:port/database”),本demo中使用的库名为player var Play = require('./models/model'); db.connection.on("error", function (error) { console.log("数据库链接失败:" + error); }); db.connection.on("open", function () { console.log("——数据库链接成功!——"); }); app.use(express.static(path.join(__dirname, 'public'))); //指定静态资源位置 app.set('views','./views'); //指定视图位置 app.set('view engine','ejs'); //指定模板引擎 app.listen(port); //监听80端口
//下面的内容是模板加载的关键,在最后细说 app.get('/',function (req,res) { res.render('index',{ }); }); app.get('/pokergame',function (req,res) { Play.find ( function(err, docs) { // err是错误信息,docs就是查询返回的文档,是一个数组 res.render('pokergame',{ name:name, player:"pp" }) } ); });
1:Jade——先进可是上手比较复杂 2:ejs——上手容易(我只用这种,由于我发现这种和我之前用过的underscore里面的模板很像哦!没必要什么都追新嘛!很累的!)
方法一:把HTML看成静态资源放在public文件夹中,而后把app.js里的
res.render('index',{ });
这行代码替换成
res.sendFile("index.html");
方法二:把你的HTML文件放在views文件夹中而且把后缀名改成ejs便可
作了上述两种操做之一后,浏览器访问localhost便可!
参考资料1:MongoDB学习笔记之Mongoose的使用2:Mongoose的model.find()查出来的为啥不是文档呢;求帮助! 3:使用mongoose过程当中遇到的疑惑(已经解决) 4:Mongodb入门
入门科普:
MongoDB的逻辑结构是一种层次结构,主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。
文档(document):由键/值对构成,像{a:1};{s:”abc”}等,它是MongoDB核心单元,MongoDB的文档(document),至关于关系数据库中的一行记录。
集合(Collection):多个文档组成一个集合(collection),至关于关系数据库的表。
数据库(database):多个集合(collection),逻辑上组织在一块儿,就是数据库(database)。 一个MongoDB实例支持多个数据库(database)。
Mongoose 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具有数据库的操做能力 Model : 由Schema发布生成的模型,具备抽象属性和行为的数据库操做对 Entity : 由Model建立的实体,他的操做也会影响数据库
安装mongodb https://www.mongodb.com/download-center?jmp=nav#community 下载下图的版本(本人PC win10系统亲测OK~)
注意把mongodb\bin路径添加到系统环境变量中,方便启动mongod服务(以下图!)
【注】若是想在cmd界面中直接操做数据库的话,只要在启动mongod状况下再打开一个cmd而后输入mongo便可
首先:按我最上方的DEMO目录添加两个文件夹schemas和models,而后分别输入
Schemas
var mongoose = require('mongoose'); var PlayerSchema = new mongoose.Schema({ headimg:String, player:String, name:String, number:Number, rate:Number, meta:{ updateAt:{ type:Date, default:Date.now() } } }) module.exports = PlayerSchema;
Models
var mongoose = require('mongoose'); var PlaySchema = require('../schemas/movie'); //下面是按照PlaySchema创建了一个Collection,model()方法的第三个参数才是数据库中Collection的名字 var Play = mongoose.model('Player',PlaySchema,'player');
module.exports = Play;
这个时候,DEMO的雏形就造成了,这时候咱们在CMD中mongo命令而后输入以下命令插入一些数据就能够加载到咱们的模板中了!
##use test2 ->>此时db指向test2 db.createCollection('t_test')->建立collection(即至关于在数据库test2中新建t_test表),用show collections //可查看到新建的test2
插入数据:(插入数据的方式有很丰富)
###db.XXX.save():
###db.XXX.insert()
//这段代码在app.js中 app.get('/',function (req,res) { res.render('index',{ }); }); app.get('/test',function (req,res) { Play.find ( function(err, docs) { // err是错误信息,docs就是查询返回的文档,是一个数组 res.render('index2',{ name:name, player:"pp" }) } ); });
这段代码是express中的路由函数,当咱们在浏览器中输入localhost时,会触发第一个函数的回调;
当咱们输入localhost/test时,会触发第二个函数的回调
而Play是Mongoose的模型,实际上就是mongodb中的一个collection
而collection.find()是mongodb的内置函数,查找数据库的信息,可是注意!mongoose执行find是异步的…返回值是mongoose自己对象 也能够说在nodejs中大多数都是方法都是异步执行的!
因此下面的写法才能正确查找到数据库信息
bookModel.find(function(err, docs) { // err是错误信息,docs就是查询返回的文档,是一个数组 console.log(docs); });
添加到视图模板中的例子以下
bookModel.find(function(err, docs) { if(err) { console.error(err); return; } res.render('view', { list: docs }); });
写到这里,基本上也就理了一遍流程,第一次写这种,写的感受很混乱,之后有机会的话我会写个提纲再整理,十分很差意思!
下面附上我本身demo的代码地址可供参考,可是路径,模块,数据库什么的都要设置好才能正确运行哦!
https://github.com/sologgfun/nodejs-demo.git
written by WJF
2016-08-16