Puha_0618 2023-06-24 13:25 采纳率: 33.3%
浏览 23

nodejs服务端不能访问,数据库连接失败

问题遇到的现象和发生背景

用nodejs编写服务端,可以启动但是不能访问,其中数据库也连接失败,为什么?

index.ts代码
// 引入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}`);
});


运行npm start后报错
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

并且无法访问localhost:8000

img

  • 写回答

2条回答 默认 最新

  • 竹山全栈 2023-06-24 13:38
    关注

    第一个检查MySQL服务器是否在运行:请确保MySQL服务器正在运行。看看计算机管理选择服务查看mysql服务开启没,或可以使用命令行或其他MySQL工具来测试MySQL服务器是否可以正确访问。您可以尝试重启MySQL服务器或使用其他MySQL客户端软件以验证MySQL服务器是否正常。
    第二个检查MySQL服务器的端口是否正确:请确保MySQL服务器的端口号是正确的,并用符合规格的格式进行输入。默认的MySQL端口号是3306。
    第三检查防火墙设置:如果计算机上运行的防火墙正在阻止与MySQL服务器的连接,请尝试暂时禁用防火墙并重新运行代码。如果重新运行代码后能够成功连接,则您需要更改防火墙设置以允许从程序访问MySQL服务器。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月24日

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?