Как отображать в браузере только результаты поиска в качестве ответа - PullRequest
0 голосов
/ 29 мая 2020

У меня есть коллекция MongoDB, в которой я выполняю поиск, используя значение из поля ввода с помощью оператора $search, и он работает, когда я консоль регистрирую result, он показывает мне только те документы, которые соответствуют поиску, но Я хочу, чтобы они также были видны на конечной точке http://localhost:3001/search, но в настоящее время я получаю все перечисленные документы, как я могу указать результат поиска? Я пытаюсь использовать res.send(result);, но это не работает. Вот моя попытка:

// Requiring the dependencies
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cors = require('cors');
require('dotenv').config();
const mongoose = require('mongoose');
const PORT = process.env.PORT || 3001;
const BASE_URL = process.env.REACT_APP_BASE_URL;
const itemRoutes = express.Router();
let Comment = require('./comment.model');

app.use(cors());
app.use(bodyParser.json());

mongoose.connect(BASE_URL, { useNewUrlParser: true })

const connection = mongoose.connection;

connection.once('open', function () {
  console.log('Connection to MongoDB established succesfully!');
});

let collection = connection.collection("posts_with_tags_test");
collection.createIndex(
  {
    postContent: 'text',
    title: 'text'
  }
);


itemRoutes.route('/search').post(async (req, res) => {
  let result = await connection.collection("posts_with_tags_test").find({
    $text: {
      $search: req.body.queryString
    }
  }).toArray();
  res.send(result);
  console.log(result)
});

app.use('/search', itemRoutes);

app.listen(PORT, function () {
  console.log('Server is running on' + ' ' + PORT);
})

и вот мое поле ввода:

import React, { Component } from "react";
import axios from "axios";

class Search extends Component {


    getSearchQuery = () => {

        const queryString = document.querySelector(
            ".search-input"
        ).value;

        axios.post("http://localhost:3001/search", {
            queryString: queryString,
        });

        console.log(queryString)
    };

    render() {
        return (
            <div>
                <input
                    type="text"
                    className="search-input"
                />
                <button type="submit" onClick={this.getSearchQuery}></button>
            </div>
        );
    }
}

export default Search;

1 Ответ

1 голос
/ 29 мая 2020

Если вы просто открываете localhost: 3001 / search из браузера, он не будет виден, потому что вы не отправляете данные {queryString: "sample"} для использования в запросе как req.body .queryString , если вы не используете Postman

Если вы обращаетесь к нему из внешнего интерфейса, в getSearchQuery вашего компонента React попробуйте использовать .then () на вашем ax ios .post () , чтобы получить ответ от вашего бэкэнда

axios.post("http://localhost:3001/search", {
    queryString: queryString,
}).then(response => {
    console.log(response);
    console.log(response.status);
    console.log(response.data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...