您现在的位置是:网站首页 > Express Generator脚手架工具文章详情
Express Generator脚手架工具
陈川
【
Node.js
】
36218人已围观
4726字
Express Generator脚手架工具简介
Express Generator是Express官方提供的命令行工具,用于快速生成Express应用的基础结构。它通过预设的模板创建项目目录和文件,包含路由、视图引擎等常用配置,显著提升开发效率。
安装Express Generator
全局安装Express Generator工具:
npm install -g express-generator
安装完成后,可以通过express --version
命令验证是否安装成功。对于较新的Node.js版本,可能需要使用npx来运行:
npx express-generator myapp
创建Express项目
使用以下命令创建新项目:
express myapp --view=ejs
这个命令会:
- 创建名为myapp的目录
- 设置EJS作为视图引擎
- 生成基础项目结构
常用选项包括:
--view
指定模板引擎(ejs/pug/hbs等)--css
指定CSS预处理器(less/stylus等)--git
添加.gitignore文件
项目结构解析
生成的项目包含以下核心目录和文件:
myapp/
├── bin/
│ └── www # 应用启动脚本
├── public/ # 静态资源
│ ├── images/
│ ├── javascripts/
│ └── stylesheets/
├── routes/ # 路由文件
│ ├── index.js
│ └── users.js
├── views/ # 视图模板
│ ├── error.ejs
│ └── index.ejs
├── app.js # 主应用文件
└── package.json # 项目配置
自定义项目配置
在app.js中可以修改默认配置:
// 设置自定义静态目录
app.use(express.static(path.join(__dirname, 'public')));
// 添加自定义中间件
app.use((req, res, next) => {
console.log('Time:', Date.now());
next();
});
// 修改默认视图目录
app.set('views', path.join(__dirname, 'custom_views'));
添加新路由
在routes目录下创建新路由文件:
// routes/api.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.json({ message: 'API is working' });
});
module.exports = router;
然后在app.js中挂载路由:
const apiRouter = require('./routes/api');
app.use('/api', apiRouter);
集成数据库
以MongoDB为例,添加数据库连接:
// 安装mongoose
npm install mongoose
// 在app.js中添加
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myapp', {
useNewUrlParser: true,
useUnifiedTopology: true
});
扩展项目功能
添加RESTful API支持:
// routes/products.js
const express = require('express');
const router = express.Router();
let products = [{ id: 1, name: 'Product 1' }];
router.get('/', (req, res) => {
res.json(products);
});
router.post('/', (req, res) => {
const product = req.body;
products.push(product);
res.status(201).json(product);
});
module.exports = router;
部署准备
配置生产环境设置:
// bin/www
const port = process.env.PORT || 3000;
server.listen(port);
// package.json
"scripts": {
"start": "node ./bin/www",
"dev": "nodemon ./bin/www"
}
常见问题解决
- 端口占用错误:
Error: listen EADDRINUSE: address already in use :::3000
解决方案:
lsof -i :3000
kill -9 [PID]
- 视图引擎不匹配: 确保安装对应的模板引擎包:
npm install ejs
- 路由404错误: 检查路由挂载顺序,静态文件中间件应放在路由之前。
高级定制技巧
创建自定义生成器模板:
- 克隆express-generator仓库
- 修改templates目录中的模板文件
- 全局安装自定义生成器
示例自定义模板变量:
// 在生成器代码中添加
this.appname = this.appname + '-custom';
性能优化建议
- 启用压缩中间件:
const compression = require('compression');
app.use(compression());
- 设置缓存控制:
app.use(express.static('public', {
maxAge: '1d'
}));
- 使用集群模式:
const cluster = require('cluster');
if (cluster.isMaster) {
// 创建工作进程
} else {
// 启动服务器
}
与其他工具集成
结合Webpack进行前端资源打包:
- 安装webpack和加载器
- 创建webpack.config.js
- 修改package.json脚本:
"scripts": {
"build": "webpack --mode production",
"dev": "concurrently \"webpack --watch\" \"nodemon ./bin/www\""
}
测试配置
添加Jest测试框架:
// __tests__/app.test.js
const request = require('supertest');
const app = require('../app');
describe('GET /', () => {
it('responds with 200', async () => {
const response = await request(app).get('/');
expect(response.statusCode).toBe(200);
});
});
现代化改进
使用ES模块替代CommonJS:
- 在package.json中添加:
"type": "module"
- 修改文件扩展名为.mjs
- 更新导入语法:
import express from 'express';
安全增强措施
- 设置安全HTTP头:
const helmet = require('helmet');
app.use(helmet());
- 防止CSRF攻击:
const csrf = require('csurf');
app.use(csrf({ cookie: true }));
- 速率限制:
const rateLimit = require('express-rate-limit');
app.use(rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
}));
项目维护建议
- 保持依赖更新:
npm outdated
npm update
- 使用dotenv管理环境变量:
require('dotenv').config();
const dbUrl = process.env.DB_URL;
- 添加日志记录:
const morgan = require('morgan');
app.use(morgan('combined'));
实际项目应用案例
电商网站基础结构生成:
express ecommerce --view=hbs --css=sass
cd ecommerce
npm install mongoose passport express-session connect-mongo
用户认证路由示例:
// routes/auth.js
router.post('/login',
passport.authenticate('local', {
successRedirect: '/profile',
failureRedirect: '/login'
})
);
上一篇: 项目维护与迭代策略
下一篇: 常用插件与扩展库介绍