📜  制作搜索框并从 mongodb 获取数据 (1)

📅  最后修改于: 2023-12-03 15:07:16.841000             🧑  作者: Mango

制作搜索框并从 MongoDB 获取数据

在这篇文章中,我们将学习如何使用 MongoDB 和 Node.js 制作搜索框并从数据库中获取数据。

环境准备

在开始编写代码之前,我们需要确保已经安装以下工具:

安装依赖

在终端中打开我们的项目,然后运行以下命令安装所需的依赖项:

npm install express mongoose body-parser
编写代码
创建 Express 应用

我们将使用 Express 框架来创建我们的应用。在项目的根目录下创建一个名为 app.js 的文件,然后在其中添加以下代码:

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

app.listen(3000, () => {
  console.log('Server started on http://localhost:3000');
});

这将创建一个 Express 应用并启动服务器。可以通过 http://localhost:3000 访问我们的应用。

连接 MongoDB

我们需要使用 Mongoose 库来连接 MongoDB 数据库。在 app.js 文件中添加以下代码:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/myapp', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log('Connected to MongoDB.');
});

这将连接到 MongoDB 数据库。在这里,我们连接到本地数据库 myapp

创建模型

我们需要创建一个名为 Product 的模型来与 MongoDB 中的集合进行交互。

app.js 文件中添加以下代码:

const productSchema = new mongoose.Schema({
  name: String,
  category: String,
  price: Number,
  description: String
});

const Product = mongoose.model('Product', productSchema);

这将创建名为 Product 的模型。

获取数据

我们将编写一个路由来获取与搜索关键字匹配的所有 Product 数据。

app.js 文件中添加以下代码:

app.get('/search', (req, res) => {
  const { keyword } = req.query;

  Product.find({ name: new RegExp(keyword, 'i') }, (err, products) => {
    if (err) {
      console.error(err);
      res.status(500).send('Internal Server Error');
    } else {
      res.json(products);
    }
  });
});

这将创建一个名为 /search 的路由,它将获取查询字符串参数 keyword 并搜索与 name 属性匹配的所有 Product 数据。

RegExp 构造函数用于构造一个正则表达式对象,以便我们可以进行不区分大小写的文本匹配。

创建搜索框

我们需要在前端创建一个搜索框,让用户输入关键字并提交搜索请求。在项目根目录下创建一个名为 index.html 的文件,并添加以下代码:

<!DOCTYPE html>
<html>

<head>
  <title>Search Example</title>
</head>

<body>
  <form>
    <input type="text" name="keyword">
    <button type="submit">Search</button>
  </form>
  <ul id="products"></ul>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    const form = document.querySelector('form');
    const products = document.querySelector('#products');

    form.addEventListener('submit', (e) => {
      e.preventDefault();

      const keyword = form.keyword.value;
      axios.get(`/search?keyword=${keyword}`)
        .then(res => {
          products.innerHTML = '';

          res.data.forEach(product => {
            const li = document.createElement('li');
            li.textContent = product.name;
            products.appendChild(li);
          });
        });
    });
  </script>
</body>

</html>

这将创建一个带有搜索框和空列表的 HTML 页面。当用户提交搜索请求时,我们将使用 Axios 库向服务器发送 GET 请求以获取数据,并将数据渲染为 HTML 列表。

运行应用程序

现在,我们已经完成了所有代码的编写。在终端中,进入项目根目录并运行以下命令以启动我们的应用程序:

node app.js

现在打开浏览器并访问 http://localhost:3000 查看我们刚刚编写的搜索页面。

总结

在本文中,我们学习了如何使用 MongoDB 和 Node.js 创建一个带有搜索框的应用程序。我们编写了代码来连接到 MongoDB 数据库、创建模型、获取数据以及在前端创建搜索框。希望这篇文章能够帮助你了解如何创建一个简单的搜索应用程序!