为了生成包含您指定目录结构的 Express.js 项目,我们需要按照以下步骤进行:
1. 使用 express-generator
初始化项目
首先,使用 express-generator
创建一个基本的 Express.js 项目:
npx express-generator prj
这会生成一个基本的 Express.js 项目结构,如下所示:
prj/
├── bin/
│ └── www
├── public/
│ ├── images/
│ ├── javascripts/
│ └── stylesheets/
│ └── style.css
├── routes/
│ ├── index.js
│ └── users.js
├── views/
│ ├── error.jade
│ ├── index.jade
│ └── layout.jade
├── app.js
├── package.json
2. 修改生成的结构以符合您的要求
按照您指定的目录结构进行调整和扩展。以下是修改后的结构和步骤:
a. 创建新的目录
在项目根目录 prj
中创建以下目录:
cd prj
mkdir controllers database router screenshots templates utils
b. 移动和重命名文件
将 routes/
重命名为 router/
:
mv routes router
将 app.js
重命名为 server.js
:
mv app.js server.js
c. 更新 server.js
中的引用
在 server.js
中,更新路由和其他文件的路径引用,以反映新目录结构。
// server.js
import createError from 'http-errors';
import express from 'express';
import path from 'path';
import cookieParser from 'cookie-parser';
import logger from 'morgan';
import indexRouter from './router/index.js';
import usersRouter from './router/users.js';
const app = express();
// view engine setup
app.set('views', path.join(path.resolve(), 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(path.resolve(), 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
export default app;
3. 更新 package.json
更新 package.json
中的 main
字段,以反映新的入口文件 server.js
:
{
"name": "prj",
"version": "0.60",
"description": "Free and Open-Source WebUI For Managing Your Containers.",
"main": "server.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"keywords": [],
"author": "andy",
"license": "MIT",
"dependencies": {
"adm-zip": "^0.5.12",
"bcrypt": "^5.1.1",
"dockerode": "^4.0.2",
"dockerode-compose": "^1.4.0",
"ejs": "^3.1.10",
"express": "^4.19.2",
"express-session": "^1.18.0",
"memorystore": "^1.6.7",
"multer": "^1.4.5-lts.1",
"sequelize": "^6.37.3",
"sqlite3": "^5.1.7",
"systeminformation": "^5.22.9",
"yaml": "^2.4.2"
}
}
4. 创建 .dockerignore
在项目根目录中创建 .dockerignore
文件,并添加需要忽略的文件和目录。例如:
node_modules
npm-debug.log
5. 完成的目录结构
最终的项目目录结构如下:
prj/
├── controllers/
├── database/
├── node_modules/
├── public/
│ ├── images/
│ ├── javascripts/
│ └── stylesheets/
│ └── style.css
├── router/
│ ├── index.js
│ └── users.js
├── screenshots/
├── templates/
├── utils/
├── views/
│ ├── error.ejs
│ ├── index.ejs
│ └── layout.ejs
├── .dockerignore
├── package.json
├── server.js
启动项目
现在,您可以通过以下命令启动项目:
npm install
npm start
这会安装所有依赖项并启动服务器。您可以在浏览器中访问 http://localhost:3000
查看应用。
prj/
├── controllers/ # 手动添加:用于存放控制器文件
├── database/ # 手动添加:用于存放数据库文件和配置
├── node_modules/ # 自动生成:npm 包的依赖文件
├── public/ # 自动生成:用于存放静态文件(CSS、JS、图片)
│ ├── images/
│ ├── javascripts/
│ └── stylesheets/
│ └── style.css
├── router/ # 将 routes/ 重命名为 router/
│ ├── index.js
│ └── users.js
├── screenshots/ # 手动添加:用于存放项目截图等
├── templates/ # 手动添加:用于存放模板文件
├── utils/ # 手动添加:用于存放工具函数和辅助文件
├── views/ # 自动生成:用于存放视图模板文件
│ ├── error.ejs
│ ├── index.ejs
│ └── layout.ejs
├── .dockerignore # 手动添加:用于指定 Docker 构建时忽略的文件
├── package.json # 自动生成:项目的 npm 配置文件
├── server.js # 将 app.js 重命名为 server.js