Node数据库入门(登录注册功能)
1.安装
(1).mysql模块安装
npm i mysql -D
(2).co-msql模块安装(该模块不是一个独立的模块,而是mysql的封装,他可以把普通接连封装成一个可以做异步调用的连接)
npm i co-mysql -D
2.基础语句
增 INSERT
INSERT INTO <TABLE> (XX,XX) VALUES (VAL,VAL);
INSERT INIT user_table (username,password) VALUES ('comedy','');
删 DELETE
DELETE FROM <TABLE> WHERE 条件; DELETE FROM user_table WHERE ID=;
改 UPDATE
UPDATE <TABLE> SET 字段=新值,字段=新值,。。。 WHERE 条件; UPDATE user_table SET password='' , username='comedy' WHERE ID=;
查 SELECT
SELECT 字段列表 FROM <TABLE> WHERE 条件 ORDER BY 字段 LIMIT ,;
3.关于索引
(1).索引是什么?
比如说:“我们去图书馆找书,是直接快?还是现查目录快?索引就是充当数据目录的角色”。但方法都是有利有弊,索引在方便你查询的时候,也要牺牲磁盘的空间为代价。
(2).索引分类
普通索引:这是最基本的索引,它没有任何限制。
唯一索引:它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它是一种特殊的唯一索引,不允许有空值。
组合索引:列值的组合必须唯一。

索引 ——提高查询性能、降低其他操作性能、更省空间。
全文索引——适合文本搜索。
4.贴代码
(1).版本1
regist_login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"></script>
<script>
$(document).ready(()=>{
$(".reg").click(async ()=>{
let data=await $.ajax({
method:'get',
url:'http://localhost:8520/reg',
data:{
username:$(".username").val(),
password:$(".password").val()
}
});
alert(data);
});
$(".login").click(async ()=>{
let data=await $.ajax({
method:'get',
url:'http://localhost:8520/login',
data:{
username:$(".username").val(),
password:$(".password").val()
}
});
});
});
</script>
</head>
<body>
<input type="text" class="username" />
<input type="password" class="password" />
<button class="reg">注册</button>
<button class="login">登录</button>
</body>
</html>
node_sql.js
const http=require('http');
const mysql=require('mysql');
const url=require('url');
const fs=require('fs');
// 1.连接到服务器
let db=mysql.createConnection({
host:'localhost',
port:,
user:'root',
password:'',
database:'node_sql'
})
if(db){console.log('sql success');}
// 2.配合http
http.createServer( (req,res)=>{
const {pathname,query}=url.parse(req.url,true);
let{username,password}=query;
if(pathname=='/reg'){ //用户想注册
if(!username || !password){
res.write('用户名和密码不能为空');
res.end();
}else if(username.length>){
res.write('用户名最大32个字');
res.end();
}else{
db.query(`SELECT ID FROM user WHERE username='${username}'`,(err,data)=>{
if(err){
res.write('数据库有错');
res.end();
}else if(data.length>){
res.write('用户名已被注册');
res.end();
}else{
db.query(`INSERT INTO user (username,password,nickname) VALUES ('${username}','${password}','placeholder')`,(err,data)=>{
if(err){
res.write('数据库有错');
res.end();
}else{
res.write('注册成功');
res.end();
}
})
}
})
}
}else if(pathname=='/login'){ //用户登录
if(!username || !password){
res.write('用户名和密码不能为空');
res.end();
}else{
db.query(`SELECT ID FROM user WHERE username='${username}'`,(err,data)=>{
if(err){
res.write('数据库有错');
res.end();
}else if(data.length<=){
res.write('用户名不存在');
res.end();
}else{
db.query(`SELECT password FROM user where username='${username}'`,(err,data)=>{
if(err){
res.write('数据库有错');
res.end();
}else {
if(data[].password!=password){
res.write('密码错误');
res.end();
}else{
res.write('登录成功');
res.end();
}
}
})
}
})
}
}else{
fs.readFile(`www${pathname}`,(err,buffer)=>{
console.log(err,buffer);
if(err){
res.writeHeader();
res.write('NOT FOUND');
}else{
res.write(buffer);
}
res.end();
})
}
}).listen(,()=>{
console.log("node_sql action");
});
(2).版本2——co-mysql
node_co_sql.js
const http=require('http');
const mysql=require('mysql');
const co=require('co-mysql');
const url=require('url');
const fs=require('fs');
//1.连接到服务器:连接池
let conn=mysql.createPool({
connectionLimit:, //最大连接数,默认为10,不要太多,太多会加重数据库负担
host:'localhost',
port:,
user:'root',
password:'',
database:'node_sql'
})
let db=co(conn); //co-mysql
// 2.配合http
http.createServer(async (req,res)=>{
const {pathname,query}=url.parse(req.url,true);
let{username,password}=query;
if(pathname=='/reg'){ //用户想注册
if(!username || !password){
res.write('用户名和密码不能为空');
res.end();
}else if(username.length>){
res.write('用户名最大32个字');
res.end();
}else{
try {
let data = await db.query(`SELECT ID FROM user WHERE username='${username}'`);
if(data.length>){
res.write('用户名已被注册');
res.end();
}else{
await db.query(`INSERT INTO user (username,password,nickname) VALUES ('${username}','${password}','placeholder')`);
res.write('注册成功');
}
} catch (error) {
res.write('数据库出错');
}
res.end();
}
}else if(pathname=='/login'){ //用户登录
if(!username || !password){
res.write('用户名和密码不能为空');
res.end();
}else{
try{
let data = await db.query(`SELECT ID FROM user WHERE username='${username}'`);
if(data.length<=){
res.write('用户名不存在');
}else{
let pwd = await db.query(`SELECT password FROM user WHERE username='${username}'`);
if(pwd[].password!=password){
res.write('密码错误');
}else{
res.write('登陆成功');
}
}
}catch(error){
res.write('数据库出错');
}
res.end();
}
}else{
fs.readFile(`www${pathname}`,(err,buffer)=>{
console.log(err,buffer);
if(err){
res.writeHeader();
res.write('NOT FOUND');
}else{
res.write(buffer);
}
res.end();
})
}
}).listen(,()=>{
console.log("node_co_sql action");
});
Node数据库入门(登录注册功能)的更多相关文章
- Node.js实现登录注册功能
使用Node.js + Navicat for mysql实现的登录注册功能 数据库中存在有”user_id,user_name,password,user_img,user_number“字段,其中 ...
- vue koa2 mongodb 从零开始做个人博客(一) 登录注册功能前端部分
0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.准备工作 1.1前端框架 前端使用了基于vue.js的nuxt.js.为什么使用nuxt.js? 首先我做的是博客的项目 ...
- Java Spring+Mysql+Mybatis 实现用户登录注册功能
前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...
- flask 开发用户登录注册功能
flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...
- JAVAEE_Servlet_20_登录注册功能
实现登录注册功能 注册功能 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import j ...
- SSM 实现登录注册功能
1.上一篇SSM框架搭建好了之后就要开始写功能了,现在来写一个简单的登录注册功能 这几个包是自己手动创建的,然后往里面写代码 2.代码详情 package com.maike.controller; ...
- 一个关于vue+mysql+express的全栈项目(三)------ 登录注册功能的实现(已经密码安全的设计)
本系列文章,主要是一个前端的视角来实现一些后端的功能,所以不会讲太多的前端东西,主要是分享做这个项目学到的一些东西,,,,, 好了闲话不多说,我们开始搭建后端服务,这里我们采用node的express ...
- JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)
1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...
- PHP实现用户登录注册功能
初学php做了一些比较常见且有用的页面,放在上面记录一下咯 我是用了bootstrap框架里面的模态框做注册登陆页面,这样页面比较美观 页面效果: 注册成功条件/功能: 1)用户名不能冲突 2)两次密 ...
随机推荐
- maven工程指定jdk版本,maven全局配置jdk的版本
- 桥接模式(Bridge)---结构型
1 基础知识 定义:将抽象部分与它的具体实现部分分离,使得它们都可以独立变化.特征:通过组合的方式建立两个之间的联系而不是继承. 使用场景:抽象和具体实现之间增加更多的灵活性:一个类存在两个(多个)独 ...
- 【CUDA 基础】5.3 减少全局内存访问
title: [CUDA 基础]5.3 减少全局内存访问 categories: - CUDA - Freshman tags: - 共享内存 - 归约 toc: true date: 2018-06 ...
- linux下如何编辑txt文档
利用vi命令 [root@bogon a]# vi a.txt 打开a.txt文档 vi a.txt后,键盘敲i,可以进入编辑模式, 输入完内容后按ESC键,键盘输入 :wq 可以保存并退出 ...
- import torch错误解决
import torch出现 ”from torch._C import * ImportError: DLL load failed: 找不到指定的模块“错误这里torch=1.0.1,torchv ...
- Django基础之response对象
与由DJango自动创建的HttpRequest对象相比, HttpResponse对象是我们的职责范围了. 我们写的每个视图都需要实例化, 填充和返回一个HttpResponse. HttpResp ...
- Codeforces 1111 E. Tree(虚树,DP)
题意 有一棵树,q个询问,每次询问,指定一个点做树根,再给定k个点,要求把这些点分成不超过m组的方案数,分配的限制是任意两个有祖先关系的点不能分在同一组.题目还保证了所有的询问的k加起来不超过1e5. ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法
本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...
- python小技巧之把list组合成chain
a=[] for i in range(10): a.append(i) for i,j in zip(a[:-1],a[1:]): print('%s=>%s'%(i,j)) 输出结果: 0= ...
- Leetcode题目64.最小路径和(动态规划-中等)
题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1, ...