1. 基础API服务器
// server.js
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
// 中间件
app.use(express.json()); // 解析JSON请求体
app.use(express.urlencoded({ extended: true })); // 解析URL编码请求体
// 基础路由
app.get('/', (req, res) => {
res.json({
message: '欢迎使用Node.js API',
version: '1.0.0',
endpoints: {
users: '/api/users',
posts: '/api/posts',
products: '/api/products'
}
});
});
// 用户数据
let users = [
{ id: 1, name: '张三', email: 'zhangsan@example.com' },
{ id: 2, name: '李四', email: 'lisi@example.com' },
{ id: 3, name: '王五', email: 'wangwu@example.com' }
];
// 用户相关API
app.get('/api/users', (req, res) => {
res.json({
success: true,
count: users.length,
data: users
});
});
app.get('/api/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const user = users.find(u => u.id === userId);
if (user) {
res.json({
success: true,
data: user
});
} else {
res.status(404).json({
success: false,
message: '用户不存在'
});
}
});
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
if (!name || !email) {
return res.status(400).json({
success: false,
message: '请提供用户名和邮箱'
});
}
const newUser = {
id: users.length + 1,
name,
email
};
users.push(newUser);
res.status(201).json({
success: true,
message: '用户创建成功',
data: newUser
});
});
// 错误处理中间件
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
success: false,
message: '服务器内部错误',
error: process.env.NODE_ENV === 'development' ? err.message : {}
});
});
// 404处理
app.use((req, res) => {
res.status(404).json({
success: false,
message: '路由不存在'
});
});
// 启动服务器
app.listen(PORT, () => {
console.log(`🚀 服务器运行在 http://localhost:${PORT}`);
console.log(`📝 API文档: http://localhost:${PORT}`);
});
2. package.json 配置
{
"name": "simple-node-api",
"version": "1.0.0",
"description": "简单的Node.js API服务器",
"main": "server.js",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}