摘要:项目启动简单启动首先,新建一个项目工程目录,然后在目录下创建启动文件。这里会用到框架来实现相关功能,所以,需要先安装它。然后我们就开始修改视图页面,添加单击事件,例如注册对应函数,大致如下通过方法进行序列化表单值,创建文本字符串。
1、项目启动
简单启动
首先,新建一个项目工程目录,然后在目录下创建启动文件app.js。
这里会用到Express框架来实现相关功能,所以,需要先安装它。
在启动文件添加如下内容,来测试Express框架是否引用成功。
let express = require("express"); let app = express(); app.get("/", function (req, res) { res.send("Hello World!"); }); app.listen(80);
浏览器查看结果显示"Hello World!",如收到响应信息则表明我们项目的第一步已经成功搞定。
2、创建目录项目已经启动成功,下面我们开始创建相关目录,用于存储不同的文件。
public目录:存放静态文件。
routes目录:存放路由文件。
views目录: 存放页面文件。
common目录:存放公共文件。
public目录(可不选),新建javascripts、stylesheets、images三个目录用以存储js、css、img相关文件。
这里我们内置了一些js、css文件来实现简单页面样式和操作,在页面视图中直接使用即可,引用方法如下:
3、添加注册视图页面
添加文件
有了目录,我们开始添加文件,先来添加一个登录页面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")));4、访问注册视图页面
访问注册页
有了视图页面,下面我们就开始访问它,app.js文件部分内容,引入相关模块资源,然后简单访问如下:
app.get("/", function (req, res) { res.render("register"); }); app.listen(80);
启动访问80端口,如成功看到注册页面则表示项目已经运行成功,如未看到,查看相关错误信息,是否缺少相关模块,安装和引用即可。
5、定义user集合Schema定义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模型操作这些属性。
6、创建公共方法还是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构造生成的模型,具有数据库操作的行为。
7、添加注册页单击函数添加函数
关于dbHelper.js文件里方法的访问很简单,如下所示:
global.dbHelper = require("./common/dbHelper");
这里我们使用global来定义全局变量dbHelper,那么dbHelper就可以在任何模块内调用了。
然后我们就开始修改register视图页面,添加单击事件,例如:
对应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"; } }) }8、添加注册页请求路由
添加路由
这里我们需要新建一个文件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); } }) } }) }) };9、模块的加载和引用
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对象10、中间件传递信息
这里我们就一步到位,在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 = "" + err + "" } 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(可视化客户端)来查看数据是否成功写入数据库。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/19012.html
摘要:用户注册模块的设计与实现注册模块功能设计介绍功能本模块主要用于新用户注册,用户通过表单提供用户名和密码信息,系统根据用户提供的注册信息对用户进行具体操作。如果身份合法,则用户可进入商品页面。 1、用户注册模块的设计与实现 注册模块功能设计介绍 功能:本模块主要用于新用户注册,用户通过表单提供用户名和密码信息,系统根据用户提供的注册信息对用户进行具体操作。 输入操作:用户名、密码、确认密...
摘要:登录之后,用户可以对相关商品进行选购并添加到购物车。结构划分项目主要分为以下几大模块注册模块,登录模块,商品模块购物车模块结算模块。购物车模块对相关商品进行增加减少删除操作。结算模块对购物车内已选择商品进行结算。 1、功能介绍 用户可以完成注册、登录,登录后对商品进行浏览。 登录之后,用户可以对相关商品进行选购并添加到购物车。 用户可以对购物车里面的商品进行增加、减少、删除操作。 用...
摘要:添加商品页视图商品页视图用户登录成功之后则跳转至视图页面商品主页,就可以进行对商品的浏览和选择了。 1、添加登录视图 添加视图 前面我们已经实现了注册功能,用户可以成功注册,接着我们就开始让用户登录了,此节我们就实现用户的登录功能,并且登录成功后跳转商品页面查看商品。 首先,我们还是在views目录下添加登录视图页面 —— login.html,效果图如下: showImg(http:...
阅读 377·2019-08-29 12:44
阅读 2984·2019-08-26 17:49
阅读 2337·2019-08-26 13:40
阅读 1163·2019-08-26 13:39
阅读 3631·2019-08-26 11:59
阅读 1798·2019-08-26 10:59
阅读 2428·2019-08-23 18:33
阅读 2667·2019-08-23 18:30