MEAN Stack 用户注册与登录示例项目教程
1. 项目目录结构及介绍
mean-stack-registration-login-example/
├── app/
│ ├── controllers/
│ ├── models/
│ ├── routes/
│ └── services/
├── config/
│ ├── config.js
│ └── db.js
├── public/
│ ├── app/
│ ├── assets/
│ └── index.html
├── server.js
└── package.json
- app/: 包含应用程序的主要逻辑,包括控制器、模型、路由和服务。
- controllers/: 处理请求并返回响应。
- models/: 定义数据模型。
- routes/: 定义API路由。
- services/: 包含业务逻辑服务。
- config/: 包含配置文件。
- config.js: 应用程序的配置文件。
- db.js: 数据库连接配置。
- public/: 包含前端静态文件。
- app/: Angular应用的源代码。
- assets/: 静态资源文件。
- index.html: 应用程序的入口HTML文件。
- server.js: 后端服务器的启动文件。
- package.json: 项目的依赖和脚本配置。
2. 项目的启动文件介绍
server.js
server.js
是项目的启动文件,负责启动Express服务器并连接到数据库。以下是文件的主要内容:
const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser');
const errorHandler = require('./app/_helpers/error-handler');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());
// api routes
app.use('/users', require('./app/routes/user.routes'));
// global error handler
app.use(errorHandler);
// start server
const port = process.env.NODE_ENV === 'production' ? (process.env.PORT || 80) : 4000;
app.listen(port, function () {
console.log('Server listening on port ' + port);
});
- 引入依赖: 引入Express、CORS、Body-parser等依赖。
- 配置中间件: 使用Body-parser处理请求体,CORS处理跨域请求。
- 定义路由: 使用
app.use
定义API路由。 - 全局错误处理: 使用自定义的错误处理中间件。
- 启动服务器: 根据环境变量启动服务器,默认端口为4000。
3. 项目的配置文件介绍
config.js
config.js
文件包含应用程序的配置信息,如数据库连接字符串、JWT密钥等。以下是文件的主要内容:
module.exports = {
db: {
connectionString: process.env.DATABASE_URL || 'mongodb://localhost:27017/mean-stack-registration-login-example'
},
jwt: {
secret: process.env.JWT_SECRET || 'secret'
}
};
- 数据库配置: 定义数据库连接字符串,默认连接本地MongoDB。
- JWT配置: 定义JWT密钥,用于生成和验证JWT令牌。
db.js
db.js
文件负责连接到MongoDB数据库。以下是文件的主要内容:
const mongoose = require('mongoose');
const config = require('./config');
mongoose.connect(config.db.connectionString, { useNewUrlParser: true, useUnifiedTopology: true });
mongoose.connection.on('connected', () => {
console.log('Mongoose default connection is open');
});
mongoose.connection.on('error', (err) => {
console.log('Mongoose default connection has occured ' + err + ' error');
});
mongoose.connection.on('disconnected', () => {
console.log('Mongoose default connection is disconnected');
});
process.on('SIGINT', () => {
mongoose.connection.close(() => {