koajs 项目实战(二)
此篇文章,接 koajs 项目实战(一)后写
(六)表单提交和参数接收
表单:
<form method="post" action="./users/zhuce">内容部分</form>
koa1:
users.js
// 注册页路由
router.post('/zhuce', function *(next) {
// 获取参数
// let email = this.query['email']; // get 方式接收参数
let email = this.request.body['email']; // post 方式接收参数 // 输出
this.body = '收到email:' + email;
});
koa2:
users.js
// 注册页路由
router.post('/zhuce', async function (ctx, next) {
// 获取参数
// let email = ctx.query['email']; // get 方式获取参数
let email = ctx.request.body['email']; // post 方式获取参数 // 输出
ctx.body = '收到email:' + email;
});
注:router.all() 既接收 get 方式传参,也接收 post 方式传参。
(七)mongoose 连接 mongodb
1.项目下安装 mongodb 和 mongoose
npm install mongodb --save-dev
npm install mongoose --save-dev
2.router中
(1)创建model

UserModel.js
// 引入 mongoose
var mongoose = require('mongoose'); // 创建 user模块
var User = mongoose.model('user', new mongoose.Schema({
email:String,
pwd:String,
nicheng:String,
},{_id:true})); module.exports = User;
(2)在 users.js 中,将 表单数据 保存至 数据库。

koa1:

koa2:

users.js
var router = require('koa-router')();
// 1.导入 mongoose
var mongoose = require('mongoose');
mongoose.Promise = global.Promise; // 2.初始化
// mongoose.Promise = require('bluebird'); // 疑似高效
// 3.导入 User
let User = require('../models/UserModel.js');
// 4.连接数据库
var db = mongoose.connect('mongodb://localhost/eduline');
router.prefix('/users');
// 默认路由
router.get('/', function *(next) {
this.body = 'this is a users response!';
});
// 登录页路由
router.get('/login', function *(next) {
// 绑定login.ejs文件
yield this.render('login',{});
});
// 注册页路由
router.post('/zhuce', function *(next) {
// // 获取参数
// // let email = this.query['email']; // get 方式接收参数
// let email = this.request.body['email']; // post 方式接收参数
// // 输出
// this.body = '收到email:' + email;
// 5.实例化 user
let user = new User(); // 因为user是关键词,当插入时,没有表会自动生成一个表,表名是users
// 6.保存参数
user.email = this.request.body['email'];
user.pwd = this.request.body['pwd'];
user.nicheng = this.request.body['nicheng'];
// 7.保存
yield user.save();
// 8.输出 自增涨id 自动生成组件
this.body = user._id;
});
module.exports = router;
mongodb的基础操作:
1.开启 mongodb
StartMongo 2.开启 端口(控制台)
startManager 3.查看数据库
use eduline 4.查看数据表
show collections 5.查看表数据
db.users.find()
(八)例外处理
1.创建索引 设置唯一键
db.users.ensureIndex({"email":1},{"unique":true,"name":"emailuiq"})
db.users.ensureIndex({"nicheng":1},{"unique":true,"name":"nichenguiq"})
2.例外处理(异常处理)
users.js
// 5.实例化 user
let user = new User(); // 因为user是关键词,当插入时,没有表会自动生成一个表,表名是users
// 6.保存参数
user.email = this.request.body['email'];
user.pwd = this.request.body['pwd'];
user.nicheng = this.request.body['nicheng'];
// 9.异常处理
try{
// 7.保存
yield user.save();
}catch(err){
console.log(err);
if(err.toString().indexOf('emailuiq')>1){
this.body = 'email重复';
}else if(err.toString().indexOf('nichenguiq')>1){
this.body = '昵称重复';
}
// 拦截
return;
}
// 8.输出 自增涨id 自动生成组件
this.body = user._id;
.
koajs 项目实战(二)的更多相关文章
- 【NFS项目实战二】NFS共享数据的时时同步推送备份
[NFS项目实战二]NFS共享数据的时时同步推送备份 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品, ...
- miniFTP项目实战二
项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...
- koajs 项目实战(一)
(一)koa 1.Koa(koajs)-- 基于 Node.js 平台的下一代 web 开发框架 koa1 npm install koa -g npm install koa-generator ...
- PHP之MVC项目实战(二)
本文主要包括以下内容 GD库图片操作 利用GD库实现验证码 文件上传 缩略图 水印 GD库图片操作 <?php $img = imagecreatetruecolor(500, 300); // ...
- React-Native 之 项目实战(二)
前言 本文有配套视频,可以酌情观看. 文中内容因各人理解不同,可能会有所偏差,欢迎朋友们联系我. 文中所有内容仅供学习交流之用,不可用于商业用途,如因此引起的相关法律法规责任,与我无关. 如文中内容对 ...
- appium+python自动化项目实战(二):项目工程结构
废话不多说,直接上图: nose.cfg配置文件里,可以指定执行的测试用例.生成测试报告等.以后将详细介绍.
- 【SSH项目实战三】脚本密钥的批量分发与执行
[SSH项目实战]脚本密钥的批量分发与执行 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载, ...
- 第二次作业——个人项目实战(sudoku)
第二次作业--个人项目实战(sudoku) 一.作业要求地址 第二次作业--个人项目实战 二.Github项目地址 softengineering1--sudoku 三.PSP表格估计耗时 PSP2. ...
- 【SSH项目实战】脚本密钥的批量分发与执行【转】
[TOC] 前言 <项目实战>系列为<linux实战教学笔记>第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成<Linux实战教学笔记>第二阶段核心教 ...
随机推荐
- 【转】iTween for Unity
http://www.cnblogs.com/zhaoqingqing/p/3833321.html?utm_source=tuicool&utm_medium=referral 你曾经在你的 ...
- AsyncSocket
如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯,本人也是刚学习,分享一下,有什么不对的地方希望大家指正 ios原生的socket用起来不是很直观,所以我用的是AsyncSocke ...
- 【Luogu】P2824排序(二分答案+线段树排序)
题目链接 震惊!两个线段树和一个线段树竟是50分的差距! 本题可以使用二分答案,二分那个位置上最后是什么数.怎么验证呢? 把原序列改变,大于等于mid的全部变成1,小于mid的全部变成0,之后线段树排 ...
- socket实例C语言:一个简单的聊天程序
我们老师让写一个简单的聊天软件,并且实现不同机子之间的通信,我用的是SOCKET编程.不废话多说了,先附上代码: 服务器端server.c #include <stdio.h> #incl ...
- $.extend(object) 和 $.fn.extend(object)
1.jQuery.extend(object); 它是为jQuery类添加类方法,可以理解为添加静态方法.如: jQuery.extend({ min: function(a, b) { return ...
- 添加一种emit的应用,反射发出,较直接调用稍慢,但好过反射与表达式树。
System.Reflection.MethodInfo mInfo = typeof(TypeParse).GetMethod("Add", System.Reflection. ...
- 调试UPX压缩的notepad
@date: 2016/11/29 @author: dlive 0x01 运行时压缩 对比upx压缩前后的notepad可以看到如下特点 PE头的大小一样 节区名称改变(.text -> .U ...
- Ubuntu14.04 LTS安装docker
有以下几种方式: 1. 通过系统自带包安装(可能不是最新版) $ sudo apt-get update $ sudo apt-get install -y docker.io $ sudo ln - ...
- PyCharm 安装配置使用
PyCharm 安装 下载地址 专业版:https://download.jetbrains.com/python/pycharm-professional-2017.2.3.exe 社区版:http ...
- golang xorm MSSQL where查询案例
xorm官方中文文档 参考 http://xorm.io/docs/ 以sqlserver为例 先初始化连接等... engine, err := xorm.NewEngine("mssql ...