Node Express将变量从客户端传递到服务器

时间:2015-07-12 06:00:24

标签: javascript node.js express

我试图将输入框中的值返回到路径中的变量,将此source作为参考但是卡住了,在示例作者中搜索关键字,使用此关键字构建网址,并返回身体反应。

我的用例有点不同我需要用户在搜索框中提供一个url作为字符串,然后我会将其传递给我的请求函数以吐出响应正文

当前的app.js(服务器端)

app.get('/searching', function(req, res){

  // input value from search
  var url = req.query.search;
  console.log(url); // prints value

  request({ uri: url}, function (error, response, body) {
    if (!error) {
      content = body;
      console.log(content);
    } else {
        console.log('Oops! Error when contacting slack.com');
    }
  });


  res.send(content);
});

main.js(客户端)

    $(function(){
     $('#submit').on( 'click', function () {
        var sSearch = $('#search').val();
        var parameters = { search: sSearch };
           $.get( '/searching',parameters, function(data) {
           $('#results').html(data);
        });
    });
   });

我意识到上述两个文件中的/searching必须被替换,因为目前它正在尝试搜索'用户输入的url值作为查询字符串,所以如果我输入" https://google.com"在文本框中,应用程序尝试搜索:

http://localhost:3000/searching?search=https%3A%2F%2Fgoogle.com

相反,我需要它将此url原样传递给request函数,以便我可以打印body response,在这种情况下,它将是页面的源代码。但我不知道该怎么办

index.jade(模板)

extends layout

block content
    input#search(type="search", placeholder="Enter Keyword")
    button#submit(type='submit',class='btn btn-success') Search
    h2#results

    script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js")
    script(src="/javascripts/main.js")

我应该如何设置格式以便将变量从客户端传递到服务器,然后在处理后将其发送回客户端?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

app.js中您正在进行异步http调用,但响应是在调用http回调之前发送的。只需移动回调中的res.send(content);

即可
app.get('/searching', function(req, res){

   // input value from search
  var url = req.query.search;
  console.log(url); // prints value

  request({ uri: url}, function (error, response, body) {
    if (!error) {
      content = body;
      console.log(content);
    } else {
      console.log('Oops! Error when contacting slack.com');
    }
    res.send(content);
  });
});

答案 1 :(得分:0)

我在您的客户端代码中看到了ajax请求,所以在您的服务器代码中,尝试回复这样的内容:

  res.status(200).json(content)

在您的客户端代码中,检查内容是否存在(在$()之前的console.log(数据).html(数据)......)

PD:请求是异步的,因此您必须在请求回调中进行响应。