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
文件结构说明
-
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;
-
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"); });
-
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 }); } };
-
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);
-
routes/:
- 定义API路由。
// userRoutes.js const express = require('express'); const router = express.Router(); const userController = require('../controllers/userController'); router.post('/', userController.createUser); module.exports = router;
-
public/:
- 存放静态资源(CSS、JS、图片等)。
-
views/:
- 存放视图模板文件(如EJS模板)。
-
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(); }); };
-
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}`));
这种结构能够清晰地划分功能模块,使代码更易于管理和扩展。