如何在 node.js 中搜索?

Posted

技术标签:

【中文标题】如何在 node.js 中搜索?【英文标题】:How do i search in node.js? 【发布时间】:2016-03-30 05:23:20 【问题描述】:

我正在使用 mongoosastic,它工作正常,但我面临的问题是,如何从 .post 方法中获取对象并将其传递给 .get 方法?

例如:

router.post('/search', function(req, res, next) 
   Product.search( something: 'Something', function(err, result) 
      if (err) return next(err);
      res.redirect('/search') // <--- How do i pass the result object?
   );
);

router.get('/search', function(req, res, next) 
    res.render('search');
);

我尝试了另一种使用 req.flash 的方法,但我不太喜欢这种方法。

你们是怎么解决这个问题的?这是一个非常基本的搜索,用户搜索然后它会将该用户重定向到另一个页面,它会显示找到的结果或未找到。

【问题讨论】:

为什么没有处理它的函数? (意味着 get 函数和 post 函数都会调用一个公共函数)为什么需要将它传递给 get 函数?这是后端代码还是前端代码,看起来像express? req.search = 结果; ?然后在你的 get('/search') 中,你可以访问 req.search。这是基本的中间件方法。将中间件想象成一系列过滤器,处理您的请求,在途中添加、删除、修改数据。这就是你想要做的?将搜索结果添加到请求中? 你为什么要这样做?您可以在post 中提供请求。 @SoluableNonagon 它是后端,使用 express.js @Ludo,所以我需要创建一个自定义中间件? 【参考方案1】:

您不需要使用 GET 将用户重定向到另一个路由来发送响应。

您可以在.post 中处理请求,这是完全可以接受的。

POSTGET 是 HTTP 请求的两种形式。无论哪种类型的请求到达 Web 服务器,响应都可以是任何东西。它可能是重定向、实际网页或其他类型的东西,例如错误。

我认为您不需要这个,但只是为了完整,对于搜索页面,它可能是不同的场景。 GET 请求可以在浏览器中添加书签,因为重新呈现页面所需的只是 URL。但是 POST 请求不能,因为它还需要请求正文中的 post 参数。如果您想让用户为带有结果的页面添加书签或永久链接到带有结果的同一页面,您可以在 GET 请求中提供请求(也)。例如在 URL 中添加一个额外的参数,例如 ?q=search-term ...

这是一种通过 GET 请求发送参数。 /search 路由也将捕获 /search?q=search-term URL。您可以使用req.query.q 访问它,其值为"search-term"(有关更多信息,请查看this question)。因此,您可以修改表单以发送 GET 请求而不是 POST (&lt;form action="get"&gt;...),也可以使用 GET 将用户重定向回搜索页面并沿 URL 传递参数。最后在 GET 请求中提供所有搜索结果。

但同样,这是更高级的东西,对于您需要做的事情,一般来说,无论是 POST 还是 GET 或其他任何请求,都可以提供服务。

【讨论】:

嘿,阿米尔,谢谢你的详细解释,但是如果你展示一些例子可以吗,因为目前我很困惑。我创建了一个 github gist gist.github.com/anonymous/69802ee3d24ff19f3ee0 @JackMoscovi 代码真的取决于你的整个项目,所以不要指望这段代码能工作,它只是给你一个想法。 Here。如果这回答了您的问题,请考虑投票并将其标记为未来访问者的答案:)

以上是关于如何在 node.js 中搜索?的主要内容,如果未能解决你的问题,请参考以下文章

如何在原生 JavaScript 和 node.js 中使用长轮询?

Node.js - 如何从 url 中删除端口? [关闭]

如何使用 express 在用户浏览器的响应标头 cookie 中查找 JSON Web 令牌 (JWT) 来制作 node.js?

如何在 HTML 中使用 fs.writeFile(使用 node.JS)?

如何使用 homebrew 在 MACOS 中安装 node.js

如何在没有机器人的情况下在 node.js 中接收我自己的电报消息