使用express-generator 快速创建应用程序骨架

目录

1、使用 express-generator 快速创建应用程序骨架

1.1、初始化

1.2、编写接口

1.3、创建下载文件接口

1.4、允许跨域


1、使用 express-generator 快速创建应用程序骨架

Express 生成器 - Express 中文文档 (nodejs.cn)

1.1、初始化

使用 express-generator 可以快速创建一个基于 Express 框架的 Node.js 项目。以下是创建项目的步骤:

  1. 首先,确保你已经安装了 Node.js。我使用的是node16版本

  2. 安装 express-generator 全局命令行工具。打开命令行窗口,输入以下命令:

npm install -g express-generator
  1. 使用 express 命令创建项目。假设你想创建一个名为 myapp 的项目,可以输入以下命令:

express myapp

这将在当前目录下创建一个名为 myapp 的新目录,其中包含了项目的基本结构。

  1. 进入项目目录,安装依赖,并启动项目

# 进入项目的目录
cd myapp
​
# 初始化依赖
npm i
​
# 启动项目
npm start

现在,你的 Express 应用应该已经运行在 http://localhost:3000

以下是 express-generator 创建的项目的基本目录结构:

myapp/
├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.pug
    ├── index.pug
    └── layout.pug

默认情况下,express-generator 使用 Pug 作为模板引擎,但你也可以通过命令行参数指定其他模板引擎,例如:

# 选择ejs
express --view=ejs myapp

以便在应用启动时打印出可访问的地址并提示启动成功,可以在 bin/www 文件中修改启动脚本。

在bin/www文件中的onListening函数添加console.log即可
​
/**
 * Event listener for HTTP server "listening" event.
 */
​
function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
  
  // 打印可访问的地址并提示启动成功
  console.log(`Server is running at http://localhost:${addr.port}`);
  console.log('Server started successfully');
}

1.2、编写接口

(我这里只是为了测试,因此数据都是写死的)

myapp 目录中,找到 routes 文件夹,并创建一个新的 JavaScript 文件,例如 version.js。在这个文件中,编写以下代码来创建 getVersion 接口:

const express = require('express');
const router = express.Router();
​
router.get('/getVersion', (req, res) => {
  res.json({ version: '1.0.0' });
});
​
module.exports = router;

app.js 文件中,引入这个新的路由文件:

const versionRouter = require('./routes/version');
app.use('/', versionRouter);

启动应用:在 myapp 目录中,使用以下命令启动应用:(这里没有使用热更新,因此需要重启应用)

npm run start

访问 getVersion 接口:在浏览器或任何 HTTP 客户端中,访问以下 URL 来获取版本信息:

http://localhost:3000/getVersion

这将返回一个包含版本信息的 JSON 对象,例如:{ "version": "1.0.0" }

1.3、创建下载文件接口

(同样也是为了测试前端)

myapp 目录中,找到 routes 文件夹,并创建一个新的 JavaScript 文件,例如 download.js。在这个文件中,编写以下代码来创建 getVersion 接口:

const express = require('express');
const router = express.Router();
const path = require('path');
const fs = require('fs');
​
// 假设您的文件存储在 public/downloads 目录下
const downloadsFolder = path.join(__dirname, '..', 'public', 'downloads');
​
router.get('/getFile/:filename', (req, res) => {
  const { filename } = req.params;
  const filePath = path.join(downloadsFolder, filename);
​
  console.log('filename', filename)
  console.log('filePath', filePath)
​
  // 检查文件是否存在
  fs.access(filePath, fs.constants.F_OK, (err) => {
    if (err) {
      // 文件不存在
      return res.status(404).send('File not found');
    }
​
    // 设置响应头
    res.setHeader('Content-Disposition', `attachment; filename=${filename}`);
    res.setHeader('Content-Type', 'application/octet-stream');
​
    // 创建可读流并管道传输到响应对象
    const fileStream = fs.createReadStream(filePath);
    fileStream.pipe(res);
  });
});
​
module.exports = router;

在应用中使用该路由,(例如 app.js),引入并使用这个路由:

const downloadRouter = require('./routes/download'); // 假设您的路由文件名为 download.js
const app = express();
​
...
​
// 使用下载路由
app.use('/api', downloadRouter);

重启服务器,访问下载接口,假设在 public/downloads 目录下有example.zip文件

http://localhost:3000/api/download/example.zip

当用户访问这个 URL 时,浏览器会提示保存文件,用户可以选择保存的位置。

注意事项

  • 确保 public/downloads 目录中的文件对服务器进程是可读的。

  • 因为我只是测试,所以很多地方欠缺考虑,写的有点简陋;里面可以考虑设置合理的错误处理,例如处理文件读取错误或文件不存在的情况。

1.4、允许跨域

在 Express 应用中允许跨域请求,您可以使用 cors 中间件。

首先,需要安装 cors 包。打开终端,并导航到项目目录,然后运行以下命令:

npm install cors

在 Express 应用中引入并使用 cors 中间件:

const express = require('express');
const cors = require('cors');
const app = express();
​
// 使用 cors 中间件来允许跨域请求
app.use(cors());
​
// ... 其他中间件和路由设置 ...
​
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

使用 cors() 不带任何参数时,它将允许所有来源的跨域请求。如果您需要更细粒度的控制,可以传递一个配置对象来定义具体的跨域策略:

app.use(cors({
  origin: 'http://example.com', // 允许来自特定域的请求
  methods: 'GET,POST,PUT,DELETE', // 允许的 HTTP 方法
  allowedHeaders: 'Content-Type,Authorization' // 允许的请求头
}));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值