NEDB & Nodejs:使用用户输入在 home.db 中搜索特定记录 - 无法将参数传递给 index.js

Posted

技术标签:

【中文标题】NEDB & Nodejs:使用用户输入在 home.db 中搜索特定记录 - 无法将参数传递给 index.js【英文标题】:NEDB & Nodejs: searching for specific record in home.db using user input - unable to pass parameter to index.js 【发布时间】:2021-09-04 01:39:36 【问题描述】:

学生警告。我正在学习使用 Nodejs,用 NEDB 和数据库表达。我正在尝试使用用户输入(在本例中为人名)查询我的 home.db(NeDB)以获取特定记录。流程的高级图: High-level record request process

流程(在我看来)如下:

    在 home.html 输入和 GET 中捕获的用户输入被点击 home.js 中的 searchSpecific() 在 fetch() 执行的地方被调用 index.js(服务器)接收请求并调用app.get() app.get() 返回结果到 home.js home.js 使用结果动态更新表(假设记录存在于数据库中) 结束

目标结果:

    在 home.html 上向用户发送成功或失败尝试通知 用户输入与数据库记录的部分匹配将被尝试和返回

这是我无法工作的地方:

    将用户输入从 home.html 传递到 home.js fetch() 以使服务器 index.js db.home.find( : /value/...) 能够搜索记录

在查看 NeDB 文档时,代码似乎只适用于 index.js,并且不建议在主页上从另一个网页调用 api 并提供适当的数据结构。我觉得我还有很多关于 HTTP 请求的知识需要学习,因此我很苦恼,但是对于 NeDB 的初学者友好的信息并不容易找到(我敢说供不应求)。

当前代码示例: 主页.html

<div class="container">
  <label for="Name">Search by name</label>
  <input type="text" class="searchInput" value="" />
  <button class="searchBtn">Get</button>
  <button class="clearBtn">Clear</button>
</div>

home.js

async function searchSpecific() 
 let getName = searchInput.value;

 const response = await fetch("/api-specific", getName);
 const data = await response.json();

index.js

app.get("/api-specific", (request, response) => 
  const searchCriteria = request.name;
  home.find( getName: searchCriteria , (err, data) => 
    if (err) 
      console.log(err);
      response.end();
      return;
    
    response.json(data);
  );
);

home.db 示例

"getName":"Beau Latting","getEmail":"latting@gmail.com","getStartDate":"2021-02-01","getTime":1623757169311,"_id":"kNcNjbQo1OPO34lb"
"getName":"Martin Ras","getEmail":"martinjnr@gmail.com","getStartDate":"2021-01-10","getTime":1623757374409,"_id":"nu5L5Sc0DN9PximD"
"getName":"William Blue","getEmail":"will@blue.com","getStartDate":"2021-06-18","getTime":1623747050246,"_id":"wUqP818jNX6Fw6tb"

结束评论。 感谢您抽出时间来帮助我解决这个问题。我已经非常仔细地考虑过在 stackO 上寻求帮助,因为我知道如果我看起来懒惰,我会受到重创,但我可以向你保证,经过一周的尝试后,我需要帮助。我确信我目前不知道如何搜索我想要实现的目标。请温柔一点。

提前致谢

【问题讨论】:

【参考方案1】:

我设法通过使用 POST 而不是 GET 来让它工作。对于我的具体案例,没有太多信息,我仍然不明白为什么,但它现在可以工作了。

事件监听器:

searchBtn.addEventListener("click", () => 
  let userSearch = 
    name: searchInput.value,
  ;

  searchSpecific("/api-homeSpecific", userSearch).then((data) => 
    updateDom(data);
  );
);

节点服务器的异步功能:

async function searchSpecific(url = "", data = ) 
  const response = await fetch(url, 
    method: "POST",
    mode: "cors",
    cache: "no-cache",
    credentials: "same-origin",
    headers: 
      "Content-Type": "application/json",
    ,
    referrerPolicy: "no-referrer",
    body: JSON.stringify(data),
  );
  return response.json();

节点服务到数据库: //具体搜索测试

app.post("/api-homeSpecific", (request, response) => 
  let inputReceived = request.body.name;
  //console.log("input Received: ", inputReceived);

  home.find(
     getName:  $regex: new RegExp(inputReceived.toLowerCase(), "i")  ,
    (err, data) => 
      if (err) 
        console.log(err);
        response.end();
        return;
      
      console.log("Request for SPECIFIC USER data executed");
      // console.log(data);
      response.json(data);
    
  );
);

结果:用户输入了一些搜索条件,特定条件被传递到 home.find() 参数并返回任何匹配(完全或部分匹配)。当用户想要使用唯一可用的信息 = 名称来确定“Bill Brown”是否是成员时的用例。

【讨论】:

以上是关于NEDB & Nodejs:使用用户输入在 home.db 中搜索特定记录 - 无法将参数传递给 index.js的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 等待 axios+nedb 函数 async/await 运行下一个查询

NEDB NodeJS 查找文档并等待结果

NodeJS nedb 函数不等待

使用用户/密码保护 nedb 数据库。

加速 NeDB 中的数组插入

从 javascript promise (expressjs + neDB) 中提取函数