Node.js使用Express+SQLite实现登录认证

在Node.js中使用Express框架配合SQLite数据库实现用户登录认证接口,你需要完成以下几个步骤:

1. 初始化项目

首先,确保你的开发环境已经安装了Node.js和npm。然后,创建一个新的项目文件夹,并初始化npm项目:

复制代码
mkdir myproject
cd myproject
npm init -y

2. 安装必要的包

安装Express和SQLite3:

复制代码
npm install express sqlite3 body-parser jsonwebtoken bcryptjs
  • body-parser 用于解析请求体中的数据。
  • jsonwebtoken 用于生成和验证JWT(JSON Web Tokens)。
  • bcryptjs 用于密码的加密。

3. 设置Express服务器和SQLite数据库

创建一个名为 app.js 的文件,并设置基本的Express服务器和连接SQLite数据库:

复制代码
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const app = express();
const PORT = 3000;

// 使用body-parser中间件来解析JSON数据
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// 连接SQLite数据库
let db = new sqlite3.Database('./database.db', (err) => {
  if (err) {
    return console.error(err.message);
  }
  console.log('Connected to the SQLite database.');
});

// 创建用户表(如果尚未创建)
db.serialize(() => {
  db.run(`CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT, password TEXT)`);
});

4. 实现注册和登录接口

注册接口:

复制代码
app.post('/register', async (req, res) => {
  const { username, password } = req.body;
  const hashedPassword = await bcrypt.hash(password, 8); // 加密密码
  db.run('INSERT INTO users (username, password) VALUES (?, ?)', [username, hashedPassword], function(err) {
    if (err) {
      res.status(500).send("Error adding user");
    } else {
      res.status(201).send("User registered");
    }
  });
});

登录接口:

复制代码
app.post('/login', async (req, res) => {
  const { username, password } = req.body;
  db.get('SELECT * FROM users WHERE username = ?', [username], async (err, row) => {
    if (err) {
      res.status(500).send("Database error");
    } else if (row) { // 如果找到用户
      const passwordMatch = await bcrypt.compare(password, row.password); // 比较密码是否匹配
      if (passwordMatch) { // 如果密码匹配,生成JWT并返回给用户
        const token = jwt.sign({ id: row.id }, 'your_secret_key', { expiresIn: '1h' }); // 生成JWT token,设置过期时间等参数。请替换'your_secret_key'为你的密钥。
        res.json({ message: "Login successful", token }); // 返回token给用户。通常应该在前端存储这个token并在后续请求中携带。
      } else { // 如果密码不匹配,返回错误信息。
        res.status(401).send("Authentication failed"); // 401 Unauthorized状态码表示未授权访问。
      }
    } else { // 如果找不到用户,返回错误信息。
      res.status(404).send("User not found"); // 404 Not Found状态码表示未找到资源。
    }
  });
});

5. 启动服务器

在 app.js 文件末尾添加以下代码来启动服务器:

复制代码
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

然后运行你的服务器:

复制代码
node app.js

现在,你应该可以通过访问 http://localhost:3000/register来注册新用户,并通过 http://localhost:3000/login进行登录

相关推荐
muddjsv11 分钟前
SQLite与MySQL/PostgreSQL本质区别:运行模型、并发、部署、权限全方位对比
mysql·postgresql·sqlite
会周易的程序员1 天前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm
5G微创业1 天前
Python / Node.js 调用短视频去水印 API 完整示例(含 SDK)
python·node.js·音视频·api·sdk·短视频
张人玉1 天前
基于 Vue 3 + ECharts + Express + SQLite 的可视化大屏与业务管理系统——YOLOv8 高精度车辆行人检测与计数系统
数据库·vue.js·yolo·sqlite·echarts·express
寒水馨1 天前
macOS下载、安装electron-v43.2.0(附安装包electron-v43.2.0-darwin-arm64.zip)
javascript·macos·electron·node.js·跨平台·桌面应用开发·开源框架
hoLzwEge2 天前
拯救低效调试!code-inspector-plugin 让代码定位如虎添翼
前端·前端框架·node.js
无巧不成书02182 天前
Node.js 多版本管理完全教程:nvm 全平台安装、版本切换与新手避坑实战
node.js·nvm·全平台安装·避坑实战
无情的西瓜皮2 天前
给 AI 装个“工具箱”:MCP 协议入门与 Node.js 实战
人工智能·node.js
__zRainy__2 天前
Node.js readline 全景指南:createInterface 配置、逐行读取与交互模式
node.js·readline
张人玉2 天前
基于 Vue 3 + ECharts + Express + SQLite 构建的鞋类零售数据分析与毛利预测平台——基于深度学习的鞋类销售数据分析系统
vue.js·sqlite·echarts·express