简单启动javascript
首先,新建一个项目工程目录,而后在目录下建立启动文件app.js
。css
这里会用到Express
框架来实现相关功能,因此,须要先安装它。html
在启动文件添加以下内容,来测试Express
框架是否引用成功。java
let express = require('express'); let app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(80);
浏览器查看结果显示"Hello World!"
,如收到响应信息则代表咱们项目的第一步已经成功搞定。jquery
项目已经启动成功,下面咱们开始建立相关目录,用于存储不一样的文件。ajax
public
目录:存放静态文件。mongodb
routes
目录:存放路由文件。数据库
views
目录: 存放页面文件。express
common
目录:存放公共文件。npm
public
目录(可不选),新建javascripts
、stylesheets
、images
三个目录用以存储js
、css
、img
相关文件。
这里咱们内置了一些js
、css
文件来实现简单页面样式和操做,在页面视图中直接使用便可,引用方法以下:
<link href="example/css/bootstrap.min.css" rel="stylesheet" > <script src="example/js/jquery.min.js" type="text/javascript"></script> <script src="example/js/bootstrap.min.js" type="text/javascript"></script>
添加文件
有了目录,咱们开始添加文件,先来添加一个登陆页面register.html
,便于管理和开发,统一把视图页面放到views
目录下。
views
目录,添加register.html
注册视图页,以下简单效果图:
有了视图页面,咱们就能够访问它了,那要如何访问呢,这里就要使用到ejs
模板了,安装方法npm install ejs --save
,引用以下:
app.set('view engine', 'html'); app.engine('.html', require('ejs').__express);
使用engine
函数注册模板引擎并指定处理后缀名为html
的文件。
设定视图存放的目录:
app.set('views', require('path').join(__dirname, 'views'));
若是是在本地项目中,咱们还要指定本地静态资源访问的路径,以下设置:
app.use(express.static(require('path').join(__dirname, 'public')));
访问注册页
有了视图页面,下面咱们就开始访问它,app.js
文件部份内容,引入相关模块资源,而后简单访问以下:
app.get('/', function (req, res) { res.render('register'); }); app.listen(80);
启动访问80
端口,如成功看到注册页面则表示项目已经运行成功,如未看到,查看相关错误信息,是否缺乏相关模块,安装和引用便可。
定义Schema
首先在common
目录内添加models.js
文件用来保存各个集合的Schema
文件(集合属性),也便于咱们查看和访问,具体内容以下所示:
module.exports = { user: { name: {type: String, required: true}, password: {type: String, required: true}, gender: {type: Boolean, default: true} } };
有了集合的Schema
文件,如何访问呢,接着咱们会介绍如何使用Model
模型操做这些属性。
仍是common
目录,咱们在新建一个公共方法 —— dbHelper.js
文件,来操做这些Schema
,由于后面还会涉及此问题,因此咱们写成一个公共的方法,dbHelper
文件内容以下:
let mongoose = require('mongoose'), Schema = mongoose.Schema, models = require('./models'); for (let m in models) { mongoose.model(m, new Schema(models[m])); } module.exports = { getModel: function (type) { return _getModel(type); } }; let _getModel = function (type) { return mongoose.model(type); };
如上所示咱们经过getModel
可获取集合的Model
模型就能够对数据库有实质性的操做了。
关于Model
,简单介绍:由Schema
构造生成的模型,具备数据库操做的行为。
添加函数
关于dbHelper.js
文件里方法的访问很简单,以下所示:
global.dbHelper = require('./common/dbHelper');
这里咱们使用global
来定义全局变量dbHelper
,那么dbHelper
就能够在任何模块内调用了。
而后咱们就开始修改register
视图页面,添加单击事件,例如:
<input type="button" onclick="register()" value="注 册">
对应register()
函数,大体以下:
function register() { //经过serialize()方法进行序列化表单值,建立文本字符串。 var data = $("form").serialize(); //例如:"username=张三&password=12345" $.ajax({ url: '/register', type: 'POST', data: data, success: function (data, status) { if (status == 'success') { location.href = 'register'; } }, error: function (res, err) { location.href = 'register'; } }) }
添加路由
这里咱们须要新建一个文件register.js
,专门用来处理来自register
页面的post
请求, 在后面还会有多个不一样处理文件,因此统一管理在routes
目录下,在实际开发中咱们可能须要针对不一样文件请求给出相应文件的处理,因此咱们就作分开处理。
这里register.js
文件处理get
和post
请求的相关代码以下:
//app:express对象 module.exports = function (app) { app.get('/register', function (req, res) { res.render('register'); }); app.post('/register', function (req, res) { var User = global.dbHelper.getModel('user'), uname = req.body.uname; User.findOne({name: uname}, function (error, doc) { if (doc) { req.session.error = '用户名已存在!'; res.send(500); } else { User.create({ name: uname, password: req.body.upwd }, function (error, doc) { if (error) { res.send(500); } else { req.session.error = '用户名建立成功!'; res.send(200); } }) } }) }) };
register
的post
请求处理中,咱们使用了session(express-session模块)
还有处理post
请求数据的body
属性(body-parser和multer模块
),需先安装他们,而后引用便可,以下参考:
//引用模块 var bodyParser = require('body-parser'); var multer = require('multer'); var session = require('express-session'); //调用中间件 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.use(multer());
后面还会再次添加多个路由记录,因此便于管理和访问,咱们能够把他们统一放到一块儿,好比routes
目录下新建index.js
文件专门用来存放添加的文件,代码以下:
module.exports = function (app) { require('./register')(app); };
那么咱们在app.js
文件中直接引用index.js
文件就能够访问这些文件了,在index.js
下写入:
require('./routes')(app);//app:express对象
这里咱们就一步到位,在register
的post
请求处理中咱们使用了express-session模块
来保存相关信息,这里咱们就使用中间件来传递这些提示信息,中间件内容以下所示:
app.use(function (req, res, next) { res.locals.user = req.session.user;//保存用户信息 var err = req.session.error;//保存结果响应信息 res.locals.message = '';//保存html标签 if (err) { res.locals.message = '<div class="alert alert-danger" style="margin-bottom: 20px;color: red;">' + err + '</div>' } else { next(); } });
这里注意中间件的安放位置,还有咱们设置了变量message
并为其简单添加了样式,这里咱们在register
视图里就用它来做为操做结果的信息提示,直接添加<%- message %>
到视图第一个div
内便可。
关于注册咱们基本已经准备就绪,开始打开链接数据库并设置用户过时时间(注意执行顺序,应放置在首个中间件位置),app.js
条件内容以下:
mongoose.Promise=global.Promise; mongoose.connect("mongodb://127.0.0.1/test"); app.use(session({ secret: 'secret', cookie: { maxAge: 1000 * 60 * 30 } }));
到这里,注册功能已经完毕,在用户注册的信息录入中,咱们没有进行相关的为空、两次密码的不匹配等等验证等等(可自行添加),赶忙注册试试吧,本地的话能够经过MongoVUE
(可视化客户端)来查看数据是否成功写入数据库。