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

Node.js中如何在服务端处理搜索表单提交并返回带查询结果的同页面

实现方案

你当前使用的res.sendFile只能返回固定的静态HTML文件,无法动态插入API返回的查询结果,所以需要引入服务端模板引擎实现动态内容渲染,全程不需要在客户端写额外逻辑,以下是具体实现步骤:

1. 安装依赖

我们以轻量易上手的EJS模板引擎为例,先安装依赖包:

npm install ejs

2. 调整项目结构

把原本的静态index.html重命名为index.ejs,放到项目根目录下新建的views文件夹中,结构参考:

你的项目目录
├── app.js
├── views
│   └── index.ejs
└── 其他项目文件

3. 配置Express模板引擎

在你的服务端入口文件(比如app.js)中新增模板引擎和表单参数解析配置:

const express = require('express');
const path = require('path');
const request = require('request');
const app = express();

// 解析表单POST提交的参数
app.use(express.urlencoded({ extended: true }));
// 配置EJS模板引擎
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

4. 修改模板文件index.ejs

在原有表单下方新增结果表格的动态渲染逻辑,没有查询结果时表格默认不显示:

<form method="POST" action="http://localhost:3000/">
    <input type="text" name="address">
    <button type="submit">Search</button>
</form>

<!-- 新增查询结果表格 -->
<% if(locals.records) { %>
<table border="1">
  <thead>
    <tr>
      <th>字段1</th>
      <th>字段2</th>
      <!-- 替换成你API返回的实际字段名 -->
    </tr>
  </thead>
  <tbody>
    <% records.forEach(item => { %>
    <tr>
      <td><%= item.field1 %></td>
      <td><%= item.field2 %></td>
      <!-- 替换成你API返回的实际字段名 -->
    </tr>
    <% }) %>
  </tbody>
</table>
<% } %>

<!-- 可选:错误提示 -->
<% if(locals.error) { %>
<p style="color:red"><%= error %></p>
<% } %>

5. 修改服务端路由逻辑

拿到API返回结果后,将结果注入模板渲染为完整HTML返回即可:

app.get('/', function(req, res){
  // 首次访问没有查询结果,直接渲染模板
  res.render('index');
});

app.post('/', function(req, res) {
  let ENDPOINT = process.env.ENDPOINT;
  const params = {
    address: req.body.address,
    key: process.env.API_KEY,
  }
  ENDPOINT = ENDPOINT.concat((new URLSearchParams(params)).toString());

  request(ENDPOINT, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      // 如果API返回的是JSON格式,先做解析
      const records = JSON.parse(body);
      // 把查询结果传给模板渲染
      res.render('index', { records: records });
    } else {
      // 错误场景处理,传递错误提示给模板
      res.render('index', { error: '查询失败,请重试' });
    }
  });
});

补充说明

如果你不想用EJS,也可以替换为Pug、Handlebars等其他服务端模板引擎,核心逻辑一致:服务端拿到API返回结果后,将数据注入模板拼接为完整HTML返回给浏览器,全程不需要客户端做额外逻辑处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:36:04