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实战教学笔记>第二阶段核心教 ...
随机推荐
- nginx通过spawn-fcgi调用C++写的cgi程序
通过apt-get install 安装nginx和spawn-fcgi /usr/local/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 9002 -C 25 -f ...
- Socket通信——服务器和客户端相互通信
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. Socket和S ...
- eclipse快捷键补全
Eclipse中 补全快捷键 默认Alt+/ 但是每个人习惯有所不同 我需要来修改自己熟悉的快捷键 windows->preferences->General->keys将Conte ...
- IIS8 不能在此路径中使用此配置节。如果在父级别上锁定了该节
问题: 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overr ...
- 简单的log
简单的方法想日志中追加内容 public static void updateSql(string Name,string str) { FileStream fs = new FileStream( ...
- 安装淘宝内核LVS
具体安装方法按照淘宝twiki来:http://kernel.taobao.org/index.php?title=Documents/Kernel_build. 但是有些问题是要注意的: 1. 修改 ...
- Crash的数字表格(bzoj 2054)
Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...
- 使用python将ppm格式转换成jpg【转】
转自:http://blog.csdn.net/hitbeauty/article/details/48465017 最近有个很火的文章,叫 有没有一段代码,让你觉得人类的智慧也可以璀璨无比? 自己试 ...
- final、finalize()、finally、static
一.final final的三种情况: 1.变量 1)对于基本类型,final使数值恒定不变:而对于对象引用,final使引用恒定不变,即一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象, ...
- StringBuilder 字符串拼接扩容
String str = a + b + c(a,b,c都是变量,非常量) 实际执行时,"+"操作是通过创建一个StringBuilder来操作的,即: StringBuilder ...