# 随堂练习:完成登录、注册功能
## 学习mongodb
* [http://nodeonly.com/nodesang/#/4](http://nodeonly.com/nodesang/#/4)
* [https://github.com/DanialK/Simple-Authentication](https://github.com/DanialK/Simple-Authentication)
## 添加mongoose
~~~
mkdir models
npm i -S mongoose
npm i -S mongoosedao
~~~
在路由里增加创建代码
### 配置
配置mongodb链接信息
* config/mongodb.example.js
* db.js
~~~
cp config/mongodb.example.js config/mongodb.js
~~~
### 创建models/user.js
~~~
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var MongooseDao = require('mongoosedao');
var userSchema = new Schema(
{
"name":"String",
"password":"String"
}
);
var User = mongoose.model('User', userSchema);
var UserDao = new MongooseDao(User);
module.exports = UserDao;
~~~
### 测试user.js
~~~
var request = require('supertest');
var assert = require('chai').assert;
var expect = require('chai').expect;
require('chai').should();
require('../db')
var User = require('../models/user')
// 测试代码基本结构
describe('UserModel', function(){
before(function() {
// runs before all tests in this block
})
after(function(){
// runs after all tests in this block
})
beforeEach(function(){
// runs before each test in this block
})
afterEach(function(){
// runs after each test in this block
})
describe('#save()', function(){
it('should return stuq when user save', function(done){
User.create({"name":"stuq","password":"password"},function(err, user){
if(err){
expect(err).to.be.not.null;
done();
}
expect(user.name).to.be.a('string');
expect(user.name).to.equal('stuq');
done();
});
})
})
})
~~~
在测试完成后需要在after里删除测试数据,保证测试完整性,自己写吧
### 在路由里增加user创建和api测试
routes/user.js
~~~
var User = require('../models/user')
router.post('/register', function(req, res, next) {
var name = req.body.name;
var password = req.body.password;
User.create({
"name":name,
"password":password
},function(err, user){
if(err){
res.json('register failed with err');
}
res.json('register sucess');
});
});
~~~
test/user_api.js
~~~
var request = require('supertest');
var assert = require('chai').assert;
var expect = require('chai').expect;
require('chai').should();
var app = require('../app');
require('../db')
describe('POST /users/register', function(){
it('respond register with json', function(done){
request(app)
.post('/users/register')
.field('name', 'stuq')
.field('password', '123456')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200, done);
})
})
~~~
测试
~~~
mocha -u bdd test/user_api.js
~~~
## 登录
routes/user.js
~~~
var User = require('../models/user')
router.post('/login', function(req, res, next) {
var name = req.body.name;
var password = req.body.password;
User.findOne({
"name":name,
"password":password
},function(err, user){
if(err){
res.json('register failed with err');
}
res.json('register sucess');
});
});
~~~
这是示意,实际代码的密码地方是不会这样写的。采用加盐加密方式
- 前言
- 1 skill
- 1.1 Coding WebIDE
- 1.2 git
- 1.3 extra practice
- 1.4 预习
- 2 nodejs入门
- 2.1 入门
- 2.2 安装
- 2.3 helloworld
- 2.4 commonJS规范
- 2.5 模块导出
- 2.6 Nodejs代码调试
- 2.7 编写Nodejs模块
- 2.8 最小化问题
- 2.9 随堂练习
- 3 异步流程控制
- 3.1 什么时候会用到异步流程控制
- 3.2 简单做法async模块
- 3.3 Promise/a+规范
- 3.4 Node.js Promise/a+实现
- 3.5 生成器Generators/yield
- 3.6 Async函数/Await
- 3.7 神奇的co
- 3.8 5种 yieldable
- 3.9 学习重点
- 3.10 随堂练习
- 4 express和微信开发入门
- 4.1 入门
- 4.2 connect
- 4.3 静态Http服务器
- 4.4 那些预处理器
- 4.5 路由
- 4.6 视图与模块引擎
- 4.7 中间件
- 4.8 更多实践
- 4.9 微信入门
- 4.10 随堂练习:完成登录、注册功能
- 5 微信实例与H5实践
- 5.1 微信基础和sandbox
- 5.2 公众号菜单和自动回复
- 5.3 微信OAuth用户授权
- 5.4 微信分享
- 5.5 wechat-api
- 5.6 H5-上篇
- 5.7 H5-下篇
- 5.8 随堂练习
- 6 weui实战
- 6.1 使用bower
- 6.2 移动端抽象
- 6.3 优化滑动列表
- 6.4 weui
- 6.5 让weui和iscroll结婚
- 6.6 优化事件
- 6.7 how-to-write-h5
- 6.8 优化无止境
- 6.9 随堂练习
- 7 微信支付
- 7.1 吹个牛
- 7.2 支付概述
- 7.3 科普几个概念
- 7.4 准备
- 7.5 调试
- 7.6 公众号支付(JSAPI)
- 7.7 对账单
- 7.8 数据处理
- 7.9 随堂练习
- 8 项目实战《付费课程系统MVP》
- 8.1 需求分析
- 8.2 ui/ue
- 8.3 技术栈
- 8.4 模型
- 8.5 静态api
- 8.6 开发
- 8.7 部署
- 8.8 监控
- 8.9 数据统计
- 8.10 demo
- 9 高级篇
- 9.1 前后端分离实践?
- 9.2 如何展望未来的大前端
- 9.3 容器和微服务
- 10 答疑问题收集