阿里云主机折上折
  • 微信号
您当前的位置:网站首页 > 常用插件与扩展库介绍

常用插件与扩展库介绍

作者:陈川 阅读数:14098人阅读 分类: Node.js

常用插件与扩展库介绍

Express作为Node.js最流行的Web框架之一,其强大之处在于丰富的中间件生态系统。通过插件和扩展库,开发者可以快速实现路由管理、模板渲染、数据库连接等功能,大幅提升开发效率。

中间件类插件

body-parser

处理HTTP请求体数据的中间件,支持JSON、URL编码和multipart格式:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json()); // 解析JSON格式
app.use(bodyParser.urlencoded({ extended: true })); // 解析URL编码格式

app.post('/api/users', (req, res) => {
  console.log(req.body); // 获取POST请求体数据
  res.sendStatus(200);
});

morgan

HTTP请求日志记录器,支持多种日志格式:

const morgan = require('morgan');
app.use(morgan('combined')); // 使用标准Apache组合日志格式
// 其他格式包括dev、tiny、short等

helmet

安全防护中间件,自动设置HTTP安全头:

const helmet = require('helmet');
app.use(helmet()); // 默认启用所有安全中间件
// 可单独配置:app.use(helmet.contentSecurityPolicy());

模板引擎扩展

ejs

嵌入式JavaScript模板引擎:

app.set('view engine', 'ejs');
app.get('/', (req, res) => {
  res.render('index', { title: 'EJS示例', items: ['a', 'b', 'c'] });
});

对应模板文件:

<!-- views/index.ejs -->
<h1><%= title %></h1>
<ul>
  <% items.forEach(item => { %>
    <li><%= item %></li>
  <% }); %>
</ul>

pug

高性能模板引擎(原Jade):

app.set('view engine', 'pug');
app.get('/profile', (req, res) => {
  res.render('profile', { user: { name: '张三', age: 28 } });
});

模板示例:

//- views/profile.pug
doctype html
html
  body
    h1= user.name
    p 年龄: #{user.age}

数据库集成

mongoose

MongoDB对象建模工具:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

const UserSchema = new mongoose.Schema({
  name: String,
  email: { type: String, unique: true }
});
const User = mongoose.model('User', UserSchema);

app.post('/users', async (req, res) => {
  const user = new User(req.body);
  await user.save();
  res.json(user);
});

sequelize

支持多种SQL数据库的ORM:

const { Sequelize, Model, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');

class User extends Model {}
User.init({
  username: DataTypes.STRING,
  birthday: DataTypes.DATE
}, { sequelize });

app.get('/users', async (req, res) => {
  const users = await User.findAll();
  res.json(users);
});

实用工具库

lodash

JavaScript实用工具库:

const _ = require('lodash');

app.get('/api/products', (req, res) => {
  const rawProducts = getProductsFromDB(); // 假设返回数组
  const filtered = _.filter(rawProducts, p => p.price > 100);
  const sorted = _.sortBy(filtered, 'name');
  res.json(_.take(sorted, 10));
});

moment

日期处理库(注意:已进入维护模式):

const moment = require('moment');

app.get('/events', (req, res) => {
  const now = moment();
  const events = getEvents().filter(e => 
    moment(e.date).isBetween(now, now.clone().add(1, 'month'))
  );
  res.json(events);
});

测试相关

supertest

HTTP断言库:

const request = require('supertest');
const app = require('../app');

describe('GET /users', () => {
  it('responds with JSON', done => {
    request(app)
      .get('/users')
      .set('Accept', 'application/json')
      .expect('Content-Type', /json/)
      .expect(200, done);
  });
});

jest

测试框架集成:

const { createServer } = require('../server');

let server;
beforeAll(() => { server = createServer(); });
afterAll(() => { server.close(); });

test('GET /ping returns pong', async () => {
  const res = await request(server).get('/ping');
  expect(res.statusCode).toBe(200);
  expect(res.text).toBe('pong');
});

性能优化

compression

响应压缩中间件:

const compression = require('compression');
app.use(compression()); // 默认使用zlib压缩
// 可配置:app.use(compression({ level: 6 }));

express-rate-limit

API限流中间件:

const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15分钟
  max: 100 // 每个IP限制100次请求
});
app.use('/api/', limiter);

实时通信

socket.io

WebSocket实时通信库:

const http = require('http');
const socketio = require('socket.io');

const server = http.createServer(app);
const io = socketio(server);

io.on('connection', socket => {
  console.log('新客户端连接');
  socket.on('chat message', msg => {
    io.emit('chat message', msg);
  });
});

server.listen(3000);

文件处理

multer

文件上传中间件:

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('avatar'), (req, res) => {
  console.log(req.file); // 上传文件信息
  res.send('上传成功');
});

sharp

高性能图像处理库:

const sharp = require('sharp');

app.get('/thumbnail', async (req, res) => {
  const buffer = await sharp('input.jpg')
    .resize(200, 200)
    .toBuffer();
  res.type('image/jpeg').send(buffer);
});

认证授权

passport

认证中间件:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  (username, password, done) => {
    User.findOne({ username }, (err, user) => {
      if (err) return done(err);
      if (!user) return done(null, false);
      if (!user.verifyPassword(password)) return done(null, false);
      return done(null, user);
    });
  }
));

app.post('/login', 
  passport.authenticate('local', { 
    successRedirect: '/',
    failureRedirect: '/login'
  })
);

jsonwebtoken

JWT实现:

const jwt = require('jsonwebtoken');

app.post('/api/auth', (req, res) => {
  const token = jwt.sign(
    { userId: 123 }, 
    'your-secret-key', 
    { expiresIn: '1h' }
  );
  res.json({ token });
});

开发工具

nodemon

开发热重载工具:

// package.json
{
  "scripts": {
    "dev": "nodemon server.js"
  }
}

dotenv

环境变量管理:

require('dotenv').config();

app.get('/config', (req, res) => {
  res.json({
    dbHost: process.env.DB_HOST,
    apiKey: process.env.API_KEY
  });
});

部署相关

pm2

生产环境进程管理:

pm2 start server.js -i max --name "my-api"
pm2 save
pm2 startup

cors

跨域资源共享中间件:

const cors = require('cors');
app.use(cors()); // 允许所有跨域请求
// 可配置:app.use(cors({ origin: 'https://example.com' }));

本站部分内容来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn

前端川

前端川,陈川的代码茶馆🍵,专治各种不服的Bug退散符💻,日常贩卖秃头警告级的开发心得🛠️,附赠一行代码笑十年的摸鱼宝典🐟,偶尔掉落咖啡杯里泡开的像素级浪漫☕。‌