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数据库入门(登录注册功能)的更多相关文章

  1. Node.js实现登录注册功能

    使用Node.js + Navicat for mysql实现的登录注册功能 数据库中存在有”user_id,user_name,password,user_img,user_number“字段,其中 ...

  2. vue koa2 mongodb 从零开始做个人博客(一) 登录注册功能前端部分

    0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.准备工作 1.1前端框架 前端使用了基于vue.js的nuxt.js.为什么使用nuxt.js? 首先我做的是博客的项目 ...

  3. Java Spring+Mysql+Mybatis 实现用户登录注册功能

    前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...

  4. flask 开发用户登录注册功能

    flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...

  5. JAVAEE_Servlet_20_登录注册功能

    实现登录注册功能 注册功能 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import j ...

  6. SSM 实现登录注册功能

    1.上一篇SSM框架搭建好了之后就要开始写功能了,现在来写一个简单的登录注册功能 这几个包是自己手动创建的,然后往里面写代码 2.代码详情 package com.maike.controller; ...

  7. 一个关于vue+mysql+express的全栈项目(三)------ 登录注册功能的实现(已经密码安全的设计)

    本系列文章,主要是一个前端的视角来实现一些后端的功能,所以不会讲太多的前端东西,主要是分享做这个项目学到的一些东西,,,,, 好了闲话不多说,我们开始搭建后端服务,这里我们采用node的express ...

  8. JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)

    1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...

  9. PHP实现用户登录注册功能

    初学php做了一些比较常见且有用的页面,放在上面记录一下咯 我是用了bootstrap框架里面的模态框做注册登陆页面,这样页面比较美观 页面效果: 注册成功条件/功能: 1)用户名不能冲突 2)两次密 ...

随机推荐

  1. maven工程指定jdk版本,maven全局配置jdk的版本

  2. 桥接模式(Bridge)---结构型

    1 基础知识 定义:将抽象部分与它的具体实现部分分离,使得它们都可以独立变化.特征:通过组合的方式建立两个之间的联系而不是继承. 使用场景:抽象和具体实现之间增加更多的灵活性:一个类存在两个(多个)独 ...

  3. 【CUDA 基础】5.3 减少全局内存访问

    title: [CUDA 基础]5.3 减少全局内存访问 categories: - CUDA - Freshman tags: - 共享内存 - 归约 toc: true date: 2018-06 ...

  4. linux下如何编辑txt文档

    利用vi命令 [root@bogon a]# vi a.txt   打开a.txt文档 vi a.txt后,键盘敲i,可以进入编辑模式, 输入完内容后按ESC键,键盘输入  :wq   可以保存并退出 ...

  5. import torch错误解决

    import torch出现 ”from torch._C import * ImportError: DLL load failed: 找不到指定的模块“错误这里torch=1.0.1,torchv ...

  6. Django基础之response对象

    与由DJango自动创建的HttpRequest对象相比, HttpResponse对象是我们的职责范围了. 我们写的每个视图都需要实例化, 填充和返回一个HttpResponse. HttpResp ...

  7. Codeforces 1111 E. Tree(虚树,DP)

    题意 有一棵树,q个询问,每次询问,指定一个点做树根,再给定k个点,要求把这些点分成不超过m组的方案数,分配的限制是任意两个有祖先关系的点不能分在同一组.题目还保证了所有的询问的k加起来不超过1e5. ...

  8. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...

  9. 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= ...

  10. Leetcode题目64.最小路径和(动态规划-中等)

    题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1, ...