Nodejs Express个人项目文件结构

Nodejs Express个人项目文件结构

这个是自己个人开发目录结构习惯

https://github.com/Nightink/Node-Ink

2 回复

Nodejs Express个人项目文件结构

在开发一个基于Node.js和Express的个人项目时,合理的文件结构对于项目的可维护性和扩展性至关重要。以下是一个我常用的文件结构示例,并附带了简单的说明和示例代码。

项目文件结构示例

my-express-app/
├── app.js
├── config/
│   └── db.js
├── controllers/
│   ├── userController.js
│   └── postController.js
├── models/
│   ├── user.js
│   └── post.js
├── routes/
│   ├── userRoutes.js
│   └── postRoutes.js
├── public/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   └── images/
│       └── logo.png
├── views/
│   ├── layouts/
│   │   └── default.ejs
│   ├── partials/
│   │   └── header.ejs
│   └── index.ejs
├── middleware/
│   └── authMiddleware.js
├── utils/
│   └── helpers.js
├── .env
├── package.json
└── README.md

文件结构说明

  1. app.js:

    • 这是应用的主要入口文件,负责初始化Express应用并引入其他模块。
    const express = require('express');
    const app = express();
    const userRoutes = require('./routes/userRoutes');
    
    app.use(express.json());
    app.use('/api/users', userRoutes);
    
    module.exports = app;
    
  2. config/db.js:

    • 配置数据库连接信息。
    const mongoose = require('mongoose');
    
    mongoose.connect(process.env.DB_URL, {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    
    const db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function() {
        console.log("Connected to database");
    });
    
  3. controllers/:

    • 包含处理请求逻辑的控制器文件。
    // userController.js
    const User = require('../models/user');
    
    exports.createUser = async (req, res) => {
        try {
            const user = await User.create(req.body);
            res.status(201).json(user);
        } catch (err) {
            res.status(400).json({ error: err.message });
        }
    };
    
  4. models/:

    • 定义数据模型。
    // user.js
    const mongoose = require('mongoose');
    
    const UserSchema = new mongoose.Schema({
        username: { type: String, required: true },
        email: { type: String, required: true, unique: true }
    });
    
    module.exports = mongoose.model('User', UserSchema);
    
  5. routes/:

    • 定义API路由。
    // userRoutes.js
    const express = require('express');
    const router = express.Router();
    const userController = require('../controllers/userController');
    
    router.post('/', userController.createUser);
    
    module.exports = router;
    
  6. public/:

    • 存放静态资源(CSS、JS、图片等)。
  7. views/:

    • 存放视图模板文件(如EJS模板)。
  8. middleware/:

    • 自定义中间件,例如认证中间件。
    // authMiddleware.js
    const jwt = require('jsonwebtoken');
    
    exports.requireAuth = (req, res, next) => {
        if (!req.headers.authorization) {
            return res.status(401).json({ message: "Unauthorized" });
        }
        const token = req.headers.authorization.split(' ')[1];
        jwt.verify(token, process.env.JWT_SECRET, (err, decoded) => {
            if (err) {
                return res.status(401).json({ message: "Invalid token" });
            }
            req.user = decoded;
            next();
        });
    };
    
  9. utils/:

    • 存放一些工具函数或辅助函数。

通过上述结构,你可以更清晰地组织代码,便于维护和扩展。希望这个示例对你有所帮助!


对于Node.js Express项目的文件结构设计,合理的组织方式不仅有助于代码的可维护性,还能提高团队协作效率。以下是一个典型的Express项目的文件结构示例:

my-express-app/
├── .gitignore
├── package.json
├── README.md
├── config/
│   └── db.js
├── controllers/
│   └── exampleController.js
├── middlewares/
│   └── exampleMiddleware.js
├── models/
│   └── exampleModel.js
├── routes/
│   └── exampleRoutes.js
├── public/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   └── images/
│       └── logo.png
├── views/
│   ├── layouts/
│   │   └── default.ejs
│   ├── partials/
│   │   └── header.ejs
│   └── index.ejs
└── server.js

文件说明

  • .gitignore: 用于指定哪些文件或目录不被Git管理。
  • package.json: 存储项目信息及依赖包,可通过npm init生成。
  • README.md: 项目介绍文档,包含如何运行项目等信息。
  • config/: 存放配置文件,如数据库连接配置。
  • controllers/: 控制器,处理请求逻辑。
  • middlewares/: 中间件,处理请求/响应中间环节的功能。
  • models/: 数据模型层,与数据库交互。
  • routes/: 路由定义,映射URL至控制器。
  • public/: 静态资源存放目录。
  • views/: 模板文件,用于渲染页面。
  • server.js: 应用入口文件。

示例代码

server.js

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const routes = require('./routes/exampleRoutes');

const app = express();
app.use(bodyParser.json());

// 连接数据库
mongoose.connect('mongodb://localhost/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });

app.use('/api', routes);

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

这种结构能够清晰地划分功能模块,使代码更易于管理和扩展。

回到顶部