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
学生警告。我正在学习使用 Nodejs,用 NEDB 和数据库表达。我正在尝试查询我的 home.db (NeDB) 以获取特定记录,利用用户输入(在本例中为人名)。该过程的高级图:
High-level record request process
流程(在我看来)如下:
- 在 home.html 中捕获用户输入并单击 GET
- home.js 中的 searchSpecific() 在执行 fetch() 的地方被调用
- index.js(服务器)接收请求并调用 app.get()
- app.get() returns 结果为 home.js
- home.js 动态更新 table 结果(假设记录存在于数据库中)
- 结束
结果针对:
- 在 home.html
上向用户发送成功或失败的尝试通知
- 用户输入与要尝试和返回的数据库记录的部分匹配
这是我无法开始工作的原因:
- 能够将用户输入从 home.html 传递到 home.js fetch() 以启用服务器 index.js db.home.find( { : /value/}.. .) 搜索记录
在查看 NeDB 文档时,该代码似乎仅适用于 index.js,并且不建议在家中从另一个网页调用 api 并提供适当的数据结构。我觉得我还有很多关于 HTTP 请求的知识要学习,因此我很挣扎,但是 NeDB 的初学者友好信息并不容易找到(我敢说供不应求)。
当前代码示例:
home.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 上寻求帮助,因为我知道如果我看起来懒惰,我会受到重创,但我可以向你保证,经过一周的尝试,我需要帮助。我确信我目前不知道如何搜索我想要实现的目标。请温柔点
提前致谢
我设法通过使用 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() 参数和 returns 任何匹配项(完全匹配或部分匹配)。当用户想要使用唯一可用信息 = 姓名来确定“Bill Brown”是否是会员时的用例。
学生警告。我正在学习使用 Nodejs,用 NEDB 和数据库表达。我正在尝试查询我的 home.db (NeDB) 以获取特定记录,利用用户输入(在本例中为人名)。该过程的高级图: High-level record request process
流程(在我看来)如下:
- 在 home.html 中捕获用户输入并单击 GET
- home.js 中的 searchSpecific() 在执行 fetch() 的地方被调用
- index.js(服务器)接收请求并调用 app.get()
- app.get() returns 结果为 home.js
- home.js 动态更新 table 结果(假设记录存在于数据库中)
- 结束
结果针对:
- 在 home.html 上向用户发送成功或失败的尝试通知
- 用户输入与要尝试和返回的数据库记录的部分匹配
这是我无法开始工作的原因:
- 能够将用户输入从 home.html 传递到 home.js fetch() 以启用服务器 index.js db.home.find( { : /value/}.. .) 搜索记录
在查看 NeDB 文档时,该代码似乎仅适用于 index.js,并且不建议在家中从另一个网页调用 api 并提供适当的数据结构。我觉得我还有很多关于 HTTP 请求的知识要学习,因此我很挣扎,但是 NeDB 的初学者友好信息并不容易找到(我敢说供不应求)。
当前代码示例: home.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 上寻求帮助,因为我知道如果我看起来懒惰,我会受到重创,但我可以向你保证,经过一周的尝试,我需要帮助。我确信我目前不知道如何搜索我想要实现的目标。请温柔点
提前致谢
我设法通过使用 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() 参数和 returns 任何匹配项(完全匹配或部分匹配)。当用户想要使用唯一可用信息 = 姓名来确定“Bill Brown”是否是会员时的用例。