express构建简单的服务

q1871901600 发布于 2024-11-10 22 次阅读


在Node.js中使用Express框架实现一个简单的增删改查(CRUD)功能,通常涉及到三个主要层:模型层(Model)、服务层(Service)和控制器层(Controller)。下面是一个简单的示例,展示了如何构建这样一个结构。

1.初始化项目和安装依赖

首先,你需要创建一个新的Node.js项目,并安装Express和其他必要的依赖。

这里我们使用mongoose来处理MongoDB的数据模型,body-parser来解析请求体。

mkdir my-crud-app
cd my-crud-app
npm init -y
npm install express mongoose body-parser

2.创建模型层(Model)

models目录下创建一个文件,比如User.js,用于定义数据模型。

// models/User.js
const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: { type: String, required: true },
  email: { type: String, required: true, unique: true }
});

module.exports = mongoose.model('User', userSchema);

3.创建服务层(Service)

services目录下创建一个文件,比如UserService.js,用于定义业务逻辑。

// services/UserService.js
const User = require('../models/User');

async function createUser(user) {
  return User.create(user);
}

async function getAllUsers() {
  return User.find();
}

async function getUserById(userId) {
  return User.findById(userId);
}

async function updateUser(userId, user) {
  return User.findByIdAndUpdate(userId, user, { new: true });
}

async function deleteUser(userId) {
  return User.findByIdAndDelete(userId);
}

module.exports = {
  createUser,
  getAllUsers,
  getUserById,
  updateUser,
  deleteUser
};

4.创建控制器层(Controller)

controllers目录下创建一个文件,比如UserController.js,用于处理HTTP请求。

// controllers/UserController.js
const UserService = require('../services/UserService');

async function createUser(req, res) {
  try {
    const user = await UserService.createUser(req.body);
    res.status(201).json(user);
  } catch (error) {
    res.status(400).json({ message: error.message });
  }
}

async function getAllUsers(req, res) {
  try {
    const users = await UserService.getAllUsers();
    res.status(200).json(users);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
}

async function getUserById(req, res) {
  try {
    const user = await UserService.getUserById(req.params.id);
    if (!user) return res.status(404).json({ message: 'User not found' });
    res.status(200).json(user);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
}

async function updateUser(req, res) {
  try {
    const user = await UserService.updateUser(req.params.id, req.body);
    if (!user) return res.status(404).json({ message: 'User not found' });
    res.status(200).json(user);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
}

async function deleteUser(req, res) {
  try {
    const user = await UserService.deleteUser(req.params.id);
    if (!user) return res.status(404).json({ message: 'User not found' });
    res.status(200).json({ message: 'User deleted' });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
}

module.exports = {
  createUser,
  getAllUsers,
  getUserById,
  updateUser,
  deleteUser
};

5.设置Express服务器

最后,设置Express服务器,并定义路由。

这个简单的示例展示了如何使用Express、Mongoose和基本的CRUD操作来构建一个RESTful API。你可以根据需要扩展模型和服务层,以适应更复杂的业务需求。

// index.js
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const UserController = require('./controllers/UserController');

const app = express();
const PORT = process.env.PORT || 3000;

// 连接MongoDB
mongoose.connect('mongodb://localhost/mycrudapp', { useNewUrlParser: true, useUnifiedTopology: true });

// 中间件
app.use(bodyParser.json());

// 路由
app.post('/users', UserController.createUser);
app.get('/users', UserController.getAllUsers);
app.get('/users/:id', UserController.getUserById);
app.put('/users/:id', UserController.updateUser);
app.delete('/users/:id', UserController.deleteUser);

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
一个会写python的Java工程师
最后更新于 2024-11-10