Node.js快速入门:搭建基础Web服务器与实现CRUD及登录功能

Node.js快速入门:搭建基础Web服务器与实现CRUD及登录功能

在Node.js中,创建一个功能完备的Web服务器如同搭积木般简单。借助Node.js的http模块和一些强大的第三方库,我们可以快速搭建起一个响应灵敏的服务器。本教程将详细介绍如何使用Node.js进行数据库操作和用户认证,包括创建数据库、实现CRUD操作和登录验证等关键步骤。

技术栈介绍

Node.js

Node.js是一个跨平台的运行时环境,它允许您在服务器上运行JavaScript代码。它基于事件驱动和非阻塞I/O模型,这使得Node.js非常适合处理大量并发连接。

Express

Express是一个灵活的Node.js Web应用框架,提供了一系列强大的功能,用于构建单页、多页以及混合Web应用。它简化了路由、中间件管理和错误处理等常见Web开发任务。

mysql

mysql是一个Node.js的客户端库,用于与MySQL数据库进行交互。它提供了一个简单易用的API,用于执行SQL查询和接收数据库响应。

body-parser

body-parser是Express的一个中间件,用于解析请求体中的JSON和URL编码的数据。它使得处理POST请求和解析复杂数据变得更加容易。

cors

cors(Cross-Origin Resource Sharing)是一个Node.js的中间件,用于实现跨源资源共享。它允许您指定哪些域名可以访问您的资源,从而避免了跨域请求问题。

实现步骤

环境搭建

首先,确保您的计算机上安装了Node.js和npm(Node Package Manager),这是Node.js开发的基础工具集。

项目初始化

在您的工作目录中,创建一个新的文件夹用于存放项目文件,并在该目录下运行npm init命令来初始化一个新的Node.js项目。

安装依赖

通过运行npm install express mysql body-parser cors命令,安装项目所需的第三方库:Express用于Web框架,mysql用于数据库操作,body-parser用于解析请求体,cors用于处理跨域请求。

配置数据库

首先,我们需要设置一个名为crud_demo的数据库,其中包含一个user表,字段包括idnamesexage

编写服务器代码

在项目目录中,创建一个JavaScript文件,例如server.js,并开始编写服务器代码。使用const express = require('express')引入Express模块,并实例化一个Express应用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//引用mysql依赖
const mysql = require("mysql");
//引用express依赖
const express = require("express");
//引用body-parser 解析post传参
const bodyParser = require("body-parser");
//express实例化
const app = express();
//引用 cors
const cors = require("cors");
const { json } = require("body-parser");
//关闭Form表单传值
app.use(bodyParser.urlencoded({ extended: false }));
//使用Json传值
app.use(bodyParser.json());
//使用cors 解决跨域问题
app.use(cors());

配置数据库连接

使用mysql模块创建一个连接到MySQL数据库的客户端实例,并提供必要的连接信息。

1
2
3
4
5
6
7
8
const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",//修改成自己的密码
database: "crud_demo",//修改成自己的数据库名
});
// 建立数据库连接
connection.connect();

解析请求体

使用body-parser中间件来解析传入的JSON和URL编码的数据。

处理跨域请求

通过cors中间件配置,允许跨域请求访问您的服务器。

实现CRUD操作

为Express应用定义路由,实现对数据库的增删改查操作。

Select操作

创建一个GET路由,用于从数据库中检索并返回用户数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* select
* http://127.0.0.1:3000/api
*/
app.get("/api", (req, res) => {
let sql = "select * from user";
connection.query(sql, function (error, results, fields) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

Delete操作

创建一个GET路由,接受用户ID作为参数,并从数据库中删除对应记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* delete
* http://127.0.0.1:3000/api/delete/4
*/
app.get("/api/delete/:id", (req, res) => {
console.log(req.params);
console.log(req.params.id);
let delSql = `DELETE FROM user where id= ${parseInt(req.params.id)}`;
console.log(delSql);
connection.query(delSql, function (error, results) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

Insert操作

创建一个GET路由,接受用户信息作为查询参数,并将其插入数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* insert
* http://localhost:3000/api/insert?id=4&name=xiaohe&sex=%E7%94%B7&age=19
*/
app.get("/api/insert", (req, res) => {
console.log(req.query);
console.log(req.body);
console.log(req.query.id);
let insertSql = `insert into user VALUES(?,?,?,?)`;
console.log(insertSql);
let data = [req.query.id, req.query.name, req.query.sex, req.query.age];
connection.query(insertSql, data, function (error, results) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

Update操作

创建一个GET路由,接受用户ID和更新信息作为查询参数,并更新数据库中的记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* update
* http://localhost:3000/api/update?id=4&name=%E7%99%BE%E5%BA%A6&sex=%E7%94%B7&age=999
*/
app.get("/api/update", (req, res) => {
console.log(req.query);
console.log(req.body);
console.log(req.query.id);
let updateSql = `update user set name = ?, sex = ?, age = ? where id = ?`;
console.log(updateSql);
let data = [req.query.name, req.query.sex, req.query.age, req.query.id];
connection.query(updateSql, data, function (error, results) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

实现登录功能

创建一个GET路由,用于接收登录请求,验证用户凭据,并返回登录结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* login
* http://127.0.0.1:3000/api/login?name="1234567890"&pwd="123456"
*/
app.get("/api/login", (req, res) => {
let loginSql = `select * from user where name = ? and pwd = ?`;
console.log(loginSql);
let data = [req.query.name, req.query.pwd];
connection.query(loginSql, data, function (error, results, fields) {
if (error) throw error;
console.log(results);
// return results;
if (results.length) {
console.log("登录成功");
} else {
console.log("账号不存在");
}
return res.json(results);
});
});

启动服务器

使用app.listen()方法启动Express服务器,并指定端口号,例如3000。

全部代码

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//引用mysql依赖
const mysql = require("mysql");
//引用express依赖
const express = require("express");
//引用body-parser 解析post传参
const bodyParser = require("body-parser");
//express实例化
const app = express();
//引用 cors
const cors = require("cors");
const { json } = require("body-parser");
//关闭Form表单传值
app.use(bodyParser.urlencoded({ extended: false }));
//使用Json传值
app.use(bodyParser.json());
//使用cors 解决跨域问题
app.use(cors());

const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",//修改成自己的密码
database: "crud_demo",//修改成自己的数据库名
});
// 建立数据库连接
connection.connect();

/**
* select
* http://127.0.0.1:3000/api
*/
app.get("/api", (req, res) => {
let sql = "select * from user";
connection.query(sql, function (error, results, fields) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

/**
* delete
* http://127.0.0.1:3000/api/delete/4
*/
app.get("/api/delete/:id", (req, res) => {
console.log(req.params);
console.log(req.params.id);
let delSql = `DELETE FROM user where id= ${parseInt(req.params.id)}`;
console.log(delSql);
connection.query(delSql, function (error, results) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

/**
* insert
* http://localhost:3000/api/insert?id=4&name=xiaohe&sex=%E7%94%B7&age=19
*/
app.get("/api/insert", (req, res) => {
console.log(req.query);
console.log(req.body);
console.log(req.query.id);
let insertSql = `insert into user VALUES(?,?,?,?)`;
console.log(insertSql);
let data = [req.query.id, req.query.name, req.query.sex, req.query.age];
connection.query(insertSql, data, function (error, results) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

/**
* update
* http://localhost:3000/api/update?id=4&name=%E7%99%BE%E5%BA%A6&sex=%E7%94%B7&age=999
*/
app.get("/api/update", (req, res) => {
console.log(req.query);
console.log(req.body);
console.log(req.query.id);
let updateSql = `update user set name = ?, sex = ?, age = ? where id = ?`;
console.log(updateSql);
let data = [req.query.name, req.query.sex, req.query.age, req.query.id];
connection.query(updateSql, data, function (error, results) {
if (error) throw error;
console.log(results);
// return results;
return res.json(results);
});
});

/**
* login
* http://127.0.0.1:3000/api/login?name="1234567890"&pwd="123456"
*/
app.get("/api/login", (req, res) => {
let loginSql = `select * from user where name = ? and pwd = ?`;
console.log(loginSql);
let data = [req.query.name, req.query.pwd];
connection.query(loginSql, data, function (error, results, fields) {
if (error) throw error;
console.log(results);
// return results;
if (results.length) {
console.log("登录成功");
} else {
console.log("账号不存在");
}
return res.json(results);
});
});

app.listen(3000, () => {
console.log("服务器启动成功...");
});

测试

使用Web浏览器或API测试工具(如Postman)访问服务器的路由,验证CRUD和登录功能是否按预期工作。

如果对你有帮助,点赞、收藏、关注是我更新的动力!👋🌟🚀

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 何福海
  • 访问人数: | 浏览次数:

请我喝杯奶茶吧~

支付宝
微信