Sending/handling GET requests in typescript using Express, Request and Node.js

本小妞迷上赌 提交于 2020-01-05 05:25:07

问题


I'm using a combination of Express and Request (installed using npm) to try to send a get request to get some json from the server. However no matter what I do the body that is returned is "undefined".

This is the code in my server.js file. The json isn't actually what I'm sending, it's just an example as I can't post what I'm actually sending.

import express = require("express");
import bodyParser = require("body-parser");
let app = express();
app.use(bodyParser.json());

app.get('/config', function(req, res){
    res.json('{name: test}');
})

app.listen(3000);

I've tried both of the following but both of them say that body is undefined.

import request = require("request");

let req = {
    url: `http://localhost:3000/config`,
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
}

request(req, function(error, response, body){
    this.config = JSON.parse(body);
})

request(`/config`, function(err, res, body) {
    this.config = JSON.parse(body);
});

Does anyone know what I'm doing wrong? I've never used express or request before so any tips would be greatly appreciated.


UPDATE

If I change the request code to the following, the inside of the function is never run. Does anyone know why this would be?

let req = {
    url: `http://localhost:3000/config`,
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
}

request(req, function(error, response, body){
    console.log("response => "+JSON.parse(body));
    return JSON.parse(body);
})

回答1:


I dont't know if you have posted whole of your server's code, it seems like you missed app.listen(port) so that your server cannot be started up correctly.

Also, if you added if (error) { console.log(error); } at the first line of the callback function of request, you'll find it print an error: [Error: Invalid URI "/config"]

And that's why the body is always undefined: You have to give the full url such like http://localhost:xxxx to request.

In short:

  • Your server didn't listen to a specific port. app.listen(5678)
  • Your client didn't know the complete url. request('http://localhost:5678/config', (...)=>{...})



回答2:


Since OP hasn't got it working and I believe the code he got up there is correct. I may as well post my working solution here to help him get started.

Hopefully this will save you hours of debugging...

Client:

"use strict";
let request = require("request");

let req = {
    url: `localhost:4444/config`,
    proxy: 'http://localhost:4444',
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
};

request(req, function (err, res, body) {
    this.config = JSON.parse(body);
    console.log("response => " + this.config);
});

Server:

"use strict";
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
var config = require('config');
app.use(bodyParser.json());

app.get('/config', function(req, res){
    res.json('{name: test}');
});

// Start the server
app.set('port', 4444);

app.listen(app.get('port'), "0.0.0.0", function() {
    console.log('started');
});

Output:

response => {name: test}



来源:https://stackoverflow.com/questions/38493568/sending-handling-get-requests-in-typescript-using-express-request-and-node-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!