Node.js创建登录接口并连接MySQL

1. 整体流程概述

在本文中,我们将学习如何使用Node.js创建一个登录接口,并连接MySQL数据库来验证用户的登录信息。下面是整个流程的步骤概述:

步骤 描述
步骤1 创建一个Node.js项目并初始化
步骤2 安装依赖包
步骤3 连接MySQL数据库
步骤4 创建用户登录接口
步骤5 验证登录信息

下面我们将逐步进行详细讲解。

2. 步骤详解

步骤1:创建一个Node.js项目并初始化

首先,我们需要创建一个新的Node.js项目。打开终端(命令行界面),进入你想要创建项目的目录,并执行以下命令:

$ mkdir login-api
$ cd login-api
$ npm init -y

这将创建一个名为login-api的新文件夹,并在其中初始化一个新的Node.js项目。

步骤2:安装依赖包

接下来,我们需要安装一些必要的依赖包。在终端中执行以下命令:

$ npm install express mysql bcrypt dotenv
  • express:用于创建和管理HTTP服务器。
  • mysql:用于连接和操作MySQL数据库。
  • bcrypt:用于对用户密码进行哈希加密。
  • dotenv:用于加载环境变量。

步骤3:连接MySQL数据库

在你的项目根目录中创建一个名为.env的文件,并在其中添加以下内容:

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=your_database_name

这些是用来连接MySQL数据库的必要配置。请将DB_PASSWORDDB_NAME替换为你的实际密码和数据库名。

在你的项目根目录中创建一个名为db.js的文件,并在其中添加以下代码:

const mysql = require('mysql');
const dotenv = require('dotenv');

dotenv.config();

const connection = mysql.createConnection({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
});

connection.connect((error) => {
  if (error) {
    console.error('Error connecting to database:', error);
  } else {
    console.log('Connected to database!');
  }
});

module.exports = connection;

这段代码将加载.env文件中的配置,然后使用mysql模块创建一个与MySQL数据库的连接,并导出该连接对象供其他文件使用。

步骤4:创建用户登录接口

在你的项目根目录中创建一个名为routes.js的文件,并在其中添加以下代码:

const express = require('express');
const bcrypt = require('bcrypt');
const connection = require('./db');

const router = express.Router();

router.post('/login', (req, res) => {
  const { username, password } = req.body;

  connection.query(
    'SELECT * FROM users WHERE username = ?',
    [username],
    (error, results) => {
      if (error) {
        console.error('Error getting user from database:', error);
        res.status(500).json({ error: 'Internal server error' });
      } else if (results.length === 0) {
        res.status(401).json({ error: 'Invalid username or password' });
      } else {
        const user = results[0];
        bcrypt.compare(password, user.password, (error, isMatch) => {
          if (error) {
            console.error('Error comparing passwords:', error);
            res.status(500).json({ error: 'Internal server error' });
          } else if (!isMatch) {
            res.status(401).json({ error: 'Invalid username or password' });
          } else {
            res.json({ message: 'Login successful' });
          }
        });
      }
    }
  );
});

module.exports = router;

这段代码创建了一个使用POST方法的/login路由,并在该路由中处理用户的登录请求。它首先从数据库中查询匹配给定用户名的用户,然后使用bcrypt模块将输入的密码与数据库中的哈希密码进行比较。如果用户名或密码无效,则返回相应的错误响应;否则,返回登录成功的响应。

步骤5:验证登录信息

在你的项目根目