在Linux环境中使用Node.js进行API设计时,可以遵循以下步骤和最佳实践:
安装Node.js:确保你的Linux系统上已经安装了Node.js。你可以通过以下命令安装:
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
选择框架:选择一个适合的Node.js框架来构建你的API。常用的框架有Express、Koa、Hapi等。这里以Express为例。
初始化项目:
mkdir my-api
cd my-api
npm init -y
安装Express:
npm install express
app.js或index.js文件中定义你的API路由。const express = require('express');
const app = express();
const port = 3000;
// 中间件
app.use(express.json());
// 定义路由
app.get('/api/items', (req, res) => {
res.json({ message: 'Get all items' });
});
app.post('/api/items', (req, res) => {
res.json({ message: 'Create a new item', data: req.body });
});
app.get('/api/items/:id', (req, res) => {
res.json({ message: `Get item with id ${req.params.id}` });
});
app.put('/api/items/:id', (req, res) => {
res.json({ message: `Update item with id ${req.params.id}`, data: req.body });
});
app.delete('/api/items/:id', (req, res) => {
res.json({ message: `Delete item with id ${req.params.id}` });
});
// 启动服务器
app.listen(port, () => {
console.log(`Server running on http://localhost:${port}`);
});
日志记录:使用morgan中间件记录请求日志。
npm install morgan
const morgan = require('morgan');
app.use(morgan('dev'));
CORS:允许跨域请求。
npm install cors
const cors = require('cors');
app.use(cors());
npm install mongoose
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
输入验证:使用joi或express-validator进行输入验证。
npm install joi
const Joi = require('joi');
const schema = Joi.object({
name: Joi.string().min(3).required(),
age: Joi.number().integer().min(18).required()
});
app.post('/api/items', (req, res) => {
const { error } = schema.validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
res.json({ message: 'Create a new item', data: req.body });
});
认证和授权:使用jsonwebtoken进行JWT认证。
npm install jsonwebtoken
const jwt = require('jsonwebtoken');
const secretKey = 'your-secret-key';
app.post('/api/login', (req, res) => {
const user = { id: 1, username: 'admin' };
const token = jwt.sign(user, secretKey, { expiresIn: '1h' });
res.json({ token });
});
app.use((req, res, next) => {
const token = req.headers['authorization'];
if (!token) return res.status(403).send('No token provided');
jwt.verify(token, secretKey, (err, decoded) => {
if (err) return res.status(401).send('Failed to authenticate token');
req.user = decoded;
next();
});
});
mocha和chai进行单元测试。npm install mocha chai supertest --save-dev
const chai = require('chai');
const expect = chai.expect;
const request = require('supertest');
const app = require('./app');
describe('GET /api/items', () => {
it('should return all items', (done) => {
request(app)
.get('/api/items')
.expect(200)
.end((err, res) => {
if (err) return done(err);
expect(res.body).to.be.an('object');
done();
});
});
});
npm install pm2 -g
pm2 start app.js
通过以上步骤,你可以在Linux环境中使用Node.js设计并实现一个功能齐全、安全可靠的API。