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实战教学笔记>第二阶段核心教 ...
随机推荐
- selenium webdriver——鼠标事件
Web产品中提供了丰富的鼠标交互方式,例如鼠标右击.双击.悬停.甚至是鼠标拖动等功能,在WebDriver中,将这些关于鼠标操作的方法 封装在ActionChains类中: ActionChains类 ...
- vivo和OPPO手机刷机
vivo和OPPO手机是蓝绿两厂,定位年轻时尚女士,比较注重拍照和听音乐,其他无视. 系统很少更新,Root和刷机也比较困难,建议是直接卡刷. 小米手机耍猴(猴子精,代指懂点手机的人) 蓝绿两厂是耍猪 ...
- BZOJ 3509: [CodeChef] COUNTARI
3509: [CodeChef] COUNTARI Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 883 Solved: 250[Submit][S ...
- SQL索引基础
原文发布时间为:2011-02-19 -- 来源于本人的百度文章 [由搬家工具导入] 一、深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索 ...
- Ubuntu备份设置与恢复
打开家目录,按CTRL+H,显示所有隐藏文件,把所有文件名前面带点的文件(比如 .config).目录备份即可下次有问题就覆盖它
- hdu 1385(Floyed+打印路径好题)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- LeetCode OJ--Merge Intervals @
https://oj.leetcode.com/problems/merge-intervals/ 合并区间 //排序 sort(intervals.begin(),intervals.end(),C ...
- Netty内存池
参考资料:http://blog.csdn.net/youaremoon/article/details/47910971 主要思想:buddy allocation,jemalloc
- asp.net core 2.1 将控制器抽离到类库中
startup.cs的ConfigureServices中添加: public void ConfigureServices(IServiceCollection services) { var ma ...
- 洛谷 P1563 玩具谜题【模拟/环】
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...