当前位置: 首页 > news >正文

在本地使用Node.js和Express框架来连接和操作远程数据库

1. 创建本地Express项目

首先使用express-generator创建一个Express项目骨架:

# 全局安装express-generator
npm install -g express-generator# 创建Express项目(这里命名为record-app)
express record-app# 进入项目目录
cd record-app# 安装基础依赖
npm install

2. 安装必要的依赖包

安装连接MongoDB所需的依赖:

# 安装MongoDB官方驱动
npm install mongodb --save# 或者使用Mongoose(推荐,更易于使用)
npm install mongoose --save# 安装其他可能需要的依赖
npm install cors --save  # 处理跨域请求
npm install dotenv --save # 环境变量管理

3. 配置数据库连接

在项目根目录创建.env文件保存数据库连接信息(注意不要将此文件提交到版本控制):

DB_HOST=XXXXXXXX
DB_PORT=27017
DB_NAME=record
DB_USER=root
DB_PASS=XXXXXXXXXXXXX

app.js文件中添加数据库连接代码:

const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
require('dotenv').config();const app = express();// 中间件设置
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));// 构建MongoDB连接字符串
const dbHost = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
const dbName = process.env.DB_NAME;
const dbUser = process.env.DB_USER;
const dbPass = process.env.DB_PASS;const mongoURI = `mongodb://${dbUser}:${dbPass}@${dbHost}:${dbPort}/${dbName}?authSource=admin`;// 连接MongoDB数据库:cite[4]:cite[7]
mongoose.connect(mongoURI, {useNewUrlParser: true,useUnifiedTopology: true
})
.then(() => {console.log('成功连接到MongoDB数据库');
})
.catch(err => {console.error('数据库连接错误:', err);
});// 其他中间件和路由设置...

4. 定义数据模型

创建一个models文件夹,并在其中创建User.js文件:

const mongoose = require('mongoose');const userSchema = new mongoose.Schema({name: {type: String,required: true},phone: {type: String,required: true}
});module.exports = mongoose.model('User', userSchema);

5. 创建路由和控制器

创建路由文件routes/users.js:

const express = require('express');
const router = express.Router();
const User = require('../models/User'); // 导入User模型// 获取所有用户:cite[4]
router.get('/', async (req, res) => {try {const users = await User.find({});res.json(users);} catch (err) {res.status(500).json({ message: err.message });}
});// 获取单个用户
router.get('/:id', async (req, res) => {try {const user = await User.findById(req.params.id);if (!user) {return res.status(404).json({ message: '用户未找到' });}res.json(user);} catch (err) {res.status(500).json({ message: err.message });}
});// 创建新用户
router.post('/', async (req, res) => {const user = new User({name: req.body.name,phone: req.body.phone});try {const newUser = await user.save();res.status(201).json(newUser);} catch (err) {res.status(400).json({ message: err.message });}
});// 更新用户
router.patch('/:id', async (req, res) => {try {const user = await User.findById(req.params.id);if (!user) {return res.status(404).json({ message: '用户未找到' });}if (req.body.name != null) {user.name = req.body.name;}if (req.body.phone != null) {user.phone = req.body.phone;}const updatedUser = await user.save();res.json(updatedUser);} catch (err) {res.status(400).json({ message: err.message });}
});// 删除用户
router.delete('/:id', async (req, res) => {try {const user = await User.findById(req.params.id);if (!user) {return res.status(404).json({ message: '用户未找到' });}await user.remove();res.json({ message: '用户已删除' });} catch (err) {res.status(500).json({ message: err.message });}
});module.exports = router;

app.js中引入路由:

// 在数据库连接后添加以下代码
const usersRouter = require('./routes/users');
app.use('/users', usersRouter);

6. 测试接口

启动Express应用程序:

npm start

使用浏览器或Postman测试API:

  • GET http://localhost:3000/users - 获取所有用户

  • GET http://localhost:3000/users/用户ID - 获取单个用户

  • POST http://localhost:3000/users - 创建新用户

  • PATCH http://localhost:3000/users/用户ID - 更新用户

  • DELETE http://localhost:3000/users/用户ID - 删除用户

7. 部署到服务器(可选)

如果你希望将Node.js应用也部署到服务器上,可以使用PM2等工具管理进程:

# 全局安装PM2
npm install -g pm2# 使用PM2启动应用
pm2 start ./bin/www --name record-app# 设置开机自启动
pm2 startup
pm2 save


文章转载自:

http://Gor49QQK.qLkjh.cn
http://KUjx9ULw.qLkjh.cn
http://x0R5Y0Jp.qLkjh.cn
http://9lnnkaNv.qLkjh.cn
http://XdUolqBU.qLkjh.cn
http://4yYsjoHW.qLkjh.cn
http://e92IJZxT.qLkjh.cn
http://vHFPdHpt.qLkjh.cn
http://RgLGDB9f.qLkjh.cn
http://05rcCXsW.qLkjh.cn
http://iaZLWidu.qLkjh.cn
http://S6QS1S93.qLkjh.cn
http://9HqvBdsR.qLkjh.cn
http://l14baxJQ.qLkjh.cn
http://c4Y1tv3y.qLkjh.cn
http://a3TX2q3M.qLkjh.cn
http://b99O5hJz.qLkjh.cn
http://v4I1OIbv.qLkjh.cn
http://c4c7hfh2.qLkjh.cn
http://GctLBoqT.qLkjh.cn
http://XKADwVVP.qLkjh.cn
http://7KN7ohBx.qLkjh.cn
http://EyaRaL6u.qLkjh.cn
http://4nvdmb5z.qLkjh.cn
http://ANp5OBJw.qLkjh.cn
http://kfZnDvRn.qLkjh.cn
http://fQvTRop2.qLkjh.cn
http://6gBamUeO.qLkjh.cn
http://owocd6B6.qLkjh.cn
http://dPS0TXbL.qLkjh.cn
http://www.dtcms.com/a/368440.html

相关文章:

  • Linux应用(2)——标准IO
  • 面试官问:你选择这份工作的动机是什么?
  • 大型语言模型SEO(LLM SEO)完全手册:驾驭搜索新范式
  • Onlyoffice集成与AI交互操作指引(Iframe版)
  • 前端视觉交互设计全解析:从悬停高亮到多维交互体系(含代码 + 图表)
  • 【基础组件】手撕 MYSQL 连接池(C++ 版本)
  • 【FastDDS】Layer Transport ( 01-overview )
  • 算法备案全流程-纯干货
  • Linux 进程信号的产生
  • 【华为Mate XTs 非凡大师】麒麟芯片回归:Mate XTs搭载麒麟9020,鸿蒙5.1体验新境界
  • Swift 解题:LeetCode 372 超级次方(Super Pow)
  • 深入理解 JVM 字节码文件:从组成结构到 Arthas 工具实践
  • C# 阿里云 OSS 图片上传步骤及浏览器查看方法
  • JVM新生代和老生代比例如何设置?
  • 基于OpenGL封装摄像机类:视图矩阵与透视矩阵的实现
  • MySQL 8.0.36 主从复制完整实验
  • 无需bootloader,BootROM -> Linux Kernel 启动模式
  • 【Vue3+TypeScript】H5项目实现企业微信OAuth2.0授权登录完整指南
  • 为什么MySQL可重复读级别不能完全避免幻读
  • Gradle Task 进阶:Task 依赖关系、输入输出、增量构建原理
  • 串口通信基础知识
  • webshell及冰蝎双击无法打开?
  • Doris 数据仓库例子
  • 从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案
  • 如何根据Excel数据表生成多个合同、工作证、录取通知书等word文件?
  • Highcharts 数据源常见问题解析:连接方式、格式处理与性能优化指南
  • T06_RNN示例
  • 【Android】Room数据库的使用
  • CoolGuard风控系统配置评分卡、权重策略|QLExpress脚本
  • 【FastDDS】Layer Transport ( 02-Transport API )