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. 数据结构实验之链表七:单链表中重复元素的删除(SDUT 2122)

    #include <bits/stdc++.h> using namespace std; typedef struct node { int data; struct node* nex ...

  2. .NetCore 读取配置文件

    1.创建config.json配置,并设置成始终复制 2.需要安装 nuget 包 Microsoft.Extensions.Configuration .Microsoft.Extensions.C ...

  3. 宝塔apache设置泛目录的反向代理/莲花泛目录

    反向解析目标站-泛目录站一般用ip或者ip:端口来搭建,这样可以节省一个域名,当然也可以用域名,看个人爱好.主站和泛站可以同一个服务器和可以不同服务器,看个人实际情况.先来看宝塔的反向代理的步骤:点击 ...

  4. Nginx之编写HTTP模块

    1. 常用数据结构 1.1 ngx_str_t typedef struct { /* * 字符串的有效长度 */ size_t len; /* * 有效字符串的起始地址,该字符串通常并不以'\0'结 ...

  5. Android屏幕横竖屏切换和生命周期管理的详细总结

    一般的我们去切换屏幕方向都是不希望Activity被重新创建,这时就需要对一些属性进行设置,或者使用代码设置.        今天想学一下Android屏幕横竖屏切换,但是网上很多知识不准确或不正确, ...

  6. mha之vip漂移 配置binlog-server备份服务器 Atlas

    MHAvip漂移 配置 通过MHA自带脚本方式,管理虚拟IP的漂移 获取管理脚本master_ip_failover cp master_ip_failover /usr/local/bin/ #脚本 ...

  7. layui-简单的登录注册界面【转载】

    register.html 源代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ...

  8. flutter richText富文本

    flutter中富文本使用 RichText( text: TextSpan( text: '登陆即同意', style: TextStyle(fontSize: 14, color: Colors. ...

  9. ZeroMQ——一个轻量级的消息通信组件 C#

    ZeroMQ——一个轻量级的消息通信组件 ZeroMQ是一个轻量级的消息通信组件,尽管名字中包含了"MQ",严格上来讲ZeroMQ并不是"消息队列/消息中间件" ...

  10. python中pip的安装与更新

    python -m pip install --upgrade pip --force-reinstall