使用 Node.js 和 Koa 2 开发后端服务。
1. 初始化项目
首先,确保你已经安装了 Node.js 和 npm。然后按照以下步骤初始化项目:
bash
mkdir my-koa-app
cd my-koa-app
npm init -y安装必要的依赖:
bash
npm install koa koa-router koa-bodyparser如果你需要数据库支持,可以安装 sequelize 和对应的数据库驱动(例如 mysql2):
bash
npm install sequelize mysql22. 项目结构
创建以下文件和文件夹:
my-koa-app/
├── app.js
├── config/
│ └── config.js
├── controllers/
│ └── userController.js
├── models/
│ └── user.js
├── routes/
│ └── userRoutes.js
└── package.json3. 配置文件
config/config.js
javascript
module.exports = {
port: 3000,
db: {
dialect: 'mysql', // 或者 'postgres', 'sqlite' 等
host: 'localhost',
username: 'root',
password: '',
database: 'my_database',
port: 3306,
},
};4. 创建模型
models/user.js
javascript
const { Sequelize, DataTypes } = require('sequelize');
const config = require('../config/config');
const sequelize = new Sequelize(config.db);
const User = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
age: {
type: DataTypes.INTEGER,
},
});
module.exports = User;5. 创建控制器
controllers/userController.js
javascript
const User = require('../models/user');
exports.getAllUsers = async (ctx) => {
try {
const users = await User.findAll();
ctx.body = users;
} catch (error) {
ctx.throw(500, error.message);
}
};
exports.createUser = async (ctx) => {
try {
const user = await User.create(ctx.request.body);
ctx.status = 201;
ctx.body = user;
} catch (error) {
ctx.throw(500, error.message);
}
};
exports.getUserById = async (ctx) => {
try {
const user = await User.findByPk(ctx.params.id);
if (user) {
ctx.body = user;
} else {
ctx.throw(404, 'User not found');
}
} catch (error) {
ctx.throw(500, error.message);
}
};
exports.updateUser = async (ctx) => {
try {
const user = await User.findByPk(ctx.params.id);
if (user) {
await user.update(ctx.request.body);
ctx.body = user;
} else {
ctx.throw(404, 'User not found');
}
} catch (error) {
ctx.throw(500, error.message);
}
};
exports.deleteUser = async (ctx) => {
try {
const user = await User.findByPk(ctx.params.id);
if (user) {
await user.destroy();
ctx.body = { message: 'User deleted successfully' };
} else {
ctx.throw(404, 'User not found');
}
} catch (error) {
ctx.throw(500, error.message);
}
};6. 创建路由
routes/userRoutes.js
javascript
const Router = require('koa-router');
const userController = require('../controllers/userController');
const router = new Router({ prefix: '/api/users' });
router.get('/', userController.getAllUsers);
router.post('/', userController.createUser);
router.get('/:id', userController.getUserById);
router.put('/:id', userController.updateUser);
router.delete('/:id', userController.deleteUser);
module.exports = router;7. 主应用文件
app.js
javascript
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const config = require('./config/config');
const userRoutes = require('./routes/userRoutes');
const app = new Koa();
// 使用 bodyParser 中间件
app.use(bodyParser());
// 注册路由
app.use(userRoutes.routes());
// 启动数据库连接
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize(config.db);
sequelize
.authenticate()
.then(() => {
console.log('Database connected successfully');
})
.catch((error) => {
console.error('Unable to connect to the database:', error);
});
// 同步数据库模型
sequelize.sync();
module.exports = app;8. 创建服务器文件
server.js
javascript
const app = require('./app');
const port = config.port || 3000;
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});9. 启动项目
运行以下命令启动服务器:
bash
node server.js10. 测试接口
示例请求:
获取所有用户:
bashGET http://localhost:3000/api/users创建新用户:
bashPOST http://localhost:3000/api/users Content-Type: application/json { "name": "John Doe", "email": "john.doe@example.com", "age": 30 }获取单个用户:
bashGET http://localhost:3000/api/users/1更新用户:
bashPUT http://localhost:3000/api/users/1 Content-Type: application/json { "name": "John Doe Updated", "email": "john.doe.updated@example.com" }删除用户:
bashDELETE http://localhost:3000/api/users/1
11. 其他功能扩展
你可以根据需求扩展以下功能:
- 添加身份验证和授权(如 JWT)
- 添加分页功能
- 添加错误日志记录
- 添加单元测试
