简体   繁体   中英

how to get a request in node repl

I've started to build a typescript library (intended to be used on the server side) and right now I'm trying to use the node repl to play around with my code and see what happens in certain situations... I've built and required the file, but now I'm having a problem: I have a function that takes a http Request (type Request from express.js), and I'd like to try and run it in the repl providing it with a copy of a request that I previously made from my browser. Is this feasible? I thought maybe I could do it by either:

  • doing regex magic on the request exported as cURL or
  • sending the request to node, but then how am I going to receive it while in the repl?

I'm not sure I understand your use-case, but you can try something like this:

In some temp folder type:

npm install "request-promise"

Then from the same temp folder, enter the REPL and type:

(async () => {const response = await require("request-promise").get("https://cnn.com"); console.log(response)})()

This example is for get , but it can be easily changed to other HTTP methods.

I've found a fairly simple way to do what I want... It involved quickly setting up a basic express server (set up following this tutorial ):

mkdir scratch && cd scratch && npm init

(select defaults except entrypoint app.js)

npm i express

Create an app.js ( vi app.js ) with the following contents:

var express = require('express');
var app = express();
var circ = {};
circ.circ = circ;
var cache = [];
app.get('/', function (req, res) {
  res.send(JSON.stringify(req, (key, value) => {
  if (typeof value === 'object' && value !== null) {
    // Duplicate reference found, discard key
    if (cache.includes(value)) return;

    // Store value in our collection
    cache.push(value);
  }
  return value;
}));
});
app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

(See this answer for JSON.stringify custom replacer resp. second argument to JSON.stringify ). You can optionally use flatted instead, which I discovered later and is surely better.

Now do the following:

  1. Run the app with node app.js
  2. In your browser, navigate to the website where your desired request is posted to.
  3. Open your browsers development tools ( Ctrl + shift + c works for me).
  4. Go to the network tab.
  5. Find the request that interests you and right click on it.
  6. Click on copy > copy as curl (or similar, depending on which browser you're using).
  7. Run that curl request, but change the url it's posted to to 127.0.0.1:3000 (eg change curl 'example.com' \...etc to curl '127.0.0.1:3000' \...etc

You should now get that request on standard output as a JSON object and it's in the format that express usually deals with. Yay, Now, pipe it into your clipboard (likely xclip -selection c on linux) or probably even better, redirect it to a file.

...

Step 2 -? Step 3 - Profit:)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM