【问题标题】:Insert data into res.body back to client将数据插入 res.body 回客户端
【发布时间】:2017-11-01 07:45:19
【问题描述】:

通过我的客户端 js,我执行了获取并发送了一些数据。 我试图做一个 res.send 或 res.json 来发回结果。

我需要创建一个新的 json 并发送吗?

快递服务器

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

const pg = require('pg');
const conString = 'postgres://postgres:password@localhost/postgres';

const bodyParser = require('body-parser');

app.use(bodyParser.json()); //support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true})); //support encoded bodies

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.listen(3000, function () {
  console.log('Server listening on port 3000!');
});

app.post('/', function(req, res){

  var uname = req.body.username;
  var pw = req.body.password;

  QueryByUserName(uname, function(err, result){
    if(err){
      console.error('error happened', err);
      //handle error
    }

    if(uname == result.username){
      //name is in our database
      if(pw == result.password){
        console.log("User and Password Correct!");
        res.json({ message: 'correct' });
      } else {
        console.log("Password Incorrect!");
        res.json({ message: "incorrect" });
      }
    } else if(result.username == "undefined"){ //placeholder
      console.log("username does not exist");
      res.send( {message: "dne"} );
      console.log(res);
    }

  });
});

function QueryByUserName(input, callback) {
  pg.connect(conString, function(err, client, done){
    if(err){
      callback(err);
      return;
    }

    client.query(SelectAll(), function(err, result){
      //Query database for all usernames
      done();

      var isFound = false;

      for(var x = 0; x < result.rows.length; x++){
        //loop through all usernames from database.
        if(result.rows[x].username == input){
          isFound = true;
          //username exists, now we obtain the rest of the data.
          client.query(findDataInDatabase(input, '*'), function(err, result){
            done();

            if(err){
              callback(err);
              return;
            }

            console.log(result.rows[0]);
            callback(null, result.rows[0]);
            //return all information regarding user to callback function
          });
        } else if(x == (result.rows.length - 1) && !isFound){
          callback(null, {username: "undefined"}); //placeholder
          //Username does not exist in database
        }
      } //end of For Loop

    });
  });
}

function findDataInDatabase(username, WhatWeLookingFor) {
  return 'select ' + WhatWeLookingFor + ' from users where username = \'' + username + '\'';
}

Express 服务器端会尝试向客户端发送消息。 但是当我这样做时,我做了一个 console.log(res) 它显示身体是 { null, null, null}

客户端登录功能

handleLogin: function(){
    let fetchData = {
      method: "post",
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },

      body: JSON.stringify({
        username: this.state.user,
        password: this.state.password,
        message: null
      })
    }

    var fromServer = fetch('http://localhost:3000/', fetchData)
    .then(function(response){
      if( !response.ok){
        throw Error (response.statusText);
      }
      console.log(response);
      console.log(response.message);
      console.log(response.body);
      console.log(response.body.text);
      return response.json();
    })
    .catch(error => console.log("there was an error --> " + error));
  },

编辑:下面的截图

【问题讨论】:

  • 你的快递代码是否包含app.use(bodyParser.urlencoded({ extended: true }));app.use(bodyParser.json());
  • @Subburaj 是的,我有那行。
  • @hurricane 我的项目中安装了 body-parser。还能是什么?
  • @Subburaj 在客户端我得到“有一个错误--> TypeError: response.body is undefined”

标签: json node.js express response


【解决方案1】:

既然你回来了,res.json({ message: 'correct' });

使用,

response.message

而不是,

response.body

  var fromServer = fetch('http://localhost:3000/', fetchData)
     .then(response => response.json())
     .then(response => {
        console.log(response.message);
     })

【讨论】:

  • response.message 返回未定义。
  • console.log(response)返回的内容
  • 我记录了 response、response.message、response.body 和 response.body.text。有问题的屏幕截图。
  • 检查是否在result varialbeconsole.log(result) 中获取数据并在QueryByUserName 结果中检查并签入terminal
  • 是的,我正在从中获取数据。因为结果反应是巨大的生病只是张贴身体。 “正文:{用户名:'someUser',密码:'asdf',消息:null},”
【解决方案2】:

与 Sraven 交谈后,Sraven 帮了大忙。 该代码正在发送一个请求,并且服务器正在响应包含该消息的响应。问题出在客户端没有正确获得响应。

以下是工作代码,最终能够产生响应。

var fromServer = fetch('http://localhost:3000/', fetchData)
.then(response => response.json())
.then(response => {
  console.log(response.message);
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 2017-04-02
    • 2011-01-09
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多