在本地使用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
相关推荐
该用户已不存在3 小时前
PHP、Python、Node.js,谁能称霸2025?
python·node.js·php
Q_Q5110082857 小时前
python+nodejs+springboot在线车辆租赁信息管理信息可视化系统
spring boot·python·信息可视化·django·flask·node.js·php
濮水大叔9 小时前
VonaJS多租户🔥居然可以同时支持共享模式和独立模式,太牛了🚀
typescript·node.js·nestjs
前端伪大叔13 小时前
第12篇|🔌 Freqtrade 交易所接入全解:API、WebSocket、限频配置详解
python·node.js
Q_Q51100828514 小时前
python+django/flask哈利波特书影音互动科普网站
spring boot·python·django·flask·node.js·php
Q_Q196328847515 小时前
python+springboot+uniapp基于微信小程序的巴马旅居养老系统 旅游养老小程序
spring boot·python·小程序·django·flask·uni-app·node.js
小白640219 小时前
前端梳理体系从常问问题去完善-工程篇(webpack,vite)
前端·webpack·node.js
寒山李白1 天前
npm镜像源配置指南
前端·npm·node.js
Q_Q19632884751 天前
python+django/flask+springboot个性化旅游推荐系统(数据可视化) 景点推荐 路线匹配 用户画像建模 智能搜索筛选 图文展示系统
spring boot·python·django·flask·node.js
Q_Q5110082851 天前
python+django/flask+springboot实践性教学系统 实训任务发布 学生作业提交 教师评阅管理系统
spring boot·python·django·flask·node.js·php