用nodejs编写服务端,可以启动但是不能访问,其中数据库也连接失败,为什么?
// 引入Express框架和body-parser中间件
import express, { Request, Response, Application } from "express";
import bodyParser from "body-parser";
import cors from "cors";
import mysql from "mysql";
// 创建Express实例
const app: Application = express();
// 创建数据库连接
const db = mysql.createConnection({
host: "localhost", //主机
user: "root", //用户
password: "123456", //密码
database: "test", //要操作的数据库
});
// 连接数据库
db.connect((err) => {
if (err) throw err;
console.log("数据库连接成功");
});
// 设置服务器端口
const PORT = process.env.PORT || 8000;
// 使用body-parser中间件解析请求体
app.use(bodyParser.urlencoded({ extended: true }));
// 添加cors中间件解决跨域问题
app.use(cors());
// 登录
app.post("/userlogin", (req: Request, res: Response) => {
const { username, password } = req.body;
db.query("SELECT * FROM user WHERE username = ?", [username], (err, results) => {
if (err) {
console.error(err);
return res.status(500).send("连接失败!");
}
if (results.length === 0) {
return res.status(200).send({ status: false, message: "该用户不存在!" });
}
// 检查密码是否正确
const user = results[0];
if (user.password !== password) {
return res.status(200).send({ status: false, message: "用户名或密码错误!" });
}
//成功响应
return res.status(200).send({ status: true, message: "登录成功!" });
});
});
// 注册
app.post("/userregister", (req: Request, res: Response) => {
const { username, password } = req.body;
db.query("SELECT * FROM user WHERE username = ?", [username], (err, results) => {
if (err) {
console.error(err);
return res.status(500).send("连接失败!");
}
if (results.length > 0) {
return res.status(200).send({ status: false, message: "该用户已存在!" });
}
// 插入数据
db.query("INSERT INTO user SET ?", { username, password }, (error, result) => {
if (error) {
console.error(error);
return res.status(500).send("连接失败!");
}
return res.status(200).send({ status: true, message: "注册成功!开始你的旅途吧" });
});
});
});
app.get("/", (req: Request, res: Response) => {
res.send("Hello Typescript with Node.js!");
});
app.listen(PORT, (): void => {
console.log(`Server Running here 👉 https://localhost:${PORT}`);
});
Error: connect ECONNREFUSED ::1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1487:16)
--------------------
at Protocol._enqueue (D:\Study\MyProject\kohara-chat\server\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Protocol.handshake (D:\Study\MyProject\kohara-chat\server\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at Connection.connect (D:\Study\MyProject\kohara-chat\server\no-dev-hook-31607684954702453.js:69:33)
at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at require.extensions..jsx.require.extensions..js (C:\Users\17321\AppData\Local\Temp\ts-node-dev-hook-31607684954702453.js:114:20) at require.extensions.<computed> (C:\Users\17321\AppData\Local\Temp\ts-node-dev-hook-31607684954702453.js:71:20)
[ERROR] 13:19:51 Error: connect ECONNREFUSED ::1:3306
第一个检查MySQL服务器是否在运行:请确保MySQL服务器正在运行。看看计算机管理选择服务查看mysql服务开启没,或可以使用命令行或其他MySQL工具来测试MySQL服务器是否可以正确访问。您可以尝试重启MySQL服务器或使用其他MySQL客户端软件以验证MySQL服务器是否正常。
第二个检查MySQL服务器的端口是否正确:请确保MySQL服务器的端口号是正确的,并用符合规格的格式进行输入。默认的MySQL端口号是3306。
第三检查防火墙设置:如果计算机上运行的防火墙正在阻止与MySQL服务器的连接,请尝试暂时禁用防火墙并重新运行代码。如果重新运行代码后能够成功连接,则您需要更改防火墙设置以允许从程序访问MySQL服务器。