You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js网页实现按URL参数读取指定目录PDF列表并打开功能求助

解决方案:基于Node.js实现按ID列出PDF并提供访问链接

作为Node.js新手,咱们一步步来搭建这个功能,用Express框架(新手友好,比原生HTTP模块简单很多),下面是完整的步骤和代码:

1. 初始化项目并安装依赖

打开命令提示符(CMD),进入你要创建项目的文件夹,依次执行以下命令:

# 初始化npm项目(一路回车默认配置即可)
npm init -y

# 安装Express框架,用来处理HTTP请求和路由
npm install express

2. 编写服务器核心代码(app.js)

创建一个名为app.js的文件,把下面的代码复制进去,每一行都加了注释帮你理解:

// 导入需要的核心模块
const express = require('express');
const fs = require('fs').promises; // 用异步文件操作API,避免阻塞服务器
const path = require('path'); // 处理文件路径,自动兼容Windows的\和Linux的/

// 创建Express应用实例
const app = express();
const port = 3000;

// 设置静态文件目录:让浏览器能直接访问files文件夹下的文件
// 这样点击PDF链接时,服务器能正确返回文件内容
app.use('/files', express.static(path.join(__dirname, 'files')));

// 处理根路径的GET请求(对应你访问的http://127.0.0.1:3000/?id=1001)
app.get('/', async (req, res) => {
  try {
    // 从URL的query参数里获取id值
    const userId = req.query.id;
    
    // 如果URL里没带id参数,返回提示信息
    if (!userId) {
      return res.send('<h1>请在URL中添加id参数,例如:http://127.0.0.1:3000/?id=1001</h1>');
    }

    // 拼接目标目录路径:当前项目下的files/{id}文件夹
    // path.join会自动处理Windows的路径分隔符,避免手动拼写出错
    const targetDir = path.join(__dirname, 'files', userId);

    // 读取目标目录下的所有文件
    const files = await fs.readdir(targetDir);

    // 筛选出后缀为.pdf的文件(不区分大小写,比如.PDF也能匹配)
    const pdfFiles = files.filter(file => {
      return file.toLowerCase().endsWith('.pdf');
    });

    // 如果目录里没有PDF文件,返回提示
    if (pdfFiles.length === 0) {
      return res.send(`<h1>用户${userId}的目录下没有PDF文件</h1>`);
    }

    // 生成HTML页面,把PDF文件做成可点击的链接
    let htmlContent = `<h1>用户${userId}的PDF文件列表</h1><ul>`;
    pdfFiles.forEach(file => {
      // 链接地址对应静态文件路径,点击后在新窗口打开PDF
      const fileUrl = `/files/${userId}/${file}`;
      htmlContent += `<li><a href="${fileUrl}" target="_blank">${file}</a></li>`;
    });
    htmlContent += '</ul>';

    // 把生成的HTML发送给浏览器
    res.send(htmlContent);

  } catch (err) {
    // 处理错误情况,比如目录不存在
    if (err.code === 'ENOENT') {
      res.status(404).send(`<h1>不存在用户${req.query.id}的目录,请检查id是否正确</h1>`);
    } else {
      // 其他未知错误,返回具体提示
      res.status(500).send(`<h1>服务器出错:${err.message}</h1>`);
    }
  }
});

// 启动服务器,监听3000端口
app.listen(port, () => {
  console.log(`服务器已启动,访问地址:http://127.0.0.1:${port}`);
});

3. 准备文件目录结构

在你的项目文件夹下创建files目录,然后在files里创建对应id的子目录(比如1001),并放入测试用的PDF文件:

你的项目文件夹/
├── app.js
├── node_modules/
├── package.json
└── files/
    └── 1001/
        ├── 项目报告.pdf
        └── 说明文档.pdf

4. 启动服务器并测试

回到CMD,执行以下命令启动服务器:

node app.js

然后打开浏览器访问http://127.0.0.1:3000/?id=1001,就能看到PDF文件列表,点击链接就能在新窗口打开对应的PDF啦!

关键细节说明

  • express.static:设置静态目录后,服务器会自动处理PDF文件的访问请求,不用额外写路由。
  • path.join:Windows下路径用\,Linux用/,用这个方法拼接路径能自动适配,避免手动拼写出错。
  • 异步操作:用fs.promises的readdir方法,不会阻塞服务器,处理多个请求时更流畅。
  • 错误处理:捕获了目录不存在、无PDF文件等常见情况,给用户清晰的提示信息。

内容的提问来源于stack exchange,提问作者Geo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:43:32