mirror of
https://github.com/axios/axios.git
synced 2026-04-14 15:21:58 +08:00
* Added AxiosHeaders class; * Fixed README.md href; * Fixed a potential bug with headers normalization; * Fixed a potential bug with headers normalization; Refactored accessor building routine; Refactored default transforms; Removed `normalizeHeaderName` helper; * Added `Content-Length` accessor; Added missed `has` accessor to TS types; * Added `AxiosTransformStream` class; Added progress capturing ability for node.js environment; Added `maxRate` option to limit the data rate in node.js environment; Refactored event handled by `onUploadProgress` && `onDownloadProgress` listeners in browser environment; Added progress & data rate tests for the http adapter; Added response stream aborting test; Added a manual progress capture test for the browser; Updated TS types; Added TS tests; Refactored request abort logic for the http adapter; Added ability to abort the response stream; * Remove `stream/promises` & `timers/promises` modules usage in tests; * Use `abortcontroller-polyfill`; * Fixed AxiosTransformStream dead-lock in legacy node versions; Fixed CancelError emitting in streams; * Reworked AxiosTransformStream internal logic to optimize memory consumption; Added throwing an error if the request stream was silently destroying (without error) Refers to #3966; * Treat the destruction of the request stream as a cancellation of the request; Fixed tests; * Emit `progress` event in the next tick; * Initial refactoring; * Refactored Mocha tests to use ESM; * Refactored Karma tests to use rollup preprocessor & ESM; Replaced grunt with gulp; Improved dev scripts; Added Babel for rollup build; * Added default commonjs package export for Node build; Added automatic contributors list generator for package.json; Co-authored-by: Jay <jasonsaayman@gmail.com>
81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
import fs from 'fs';
|
|
import url from 'url';
|
|
import path from 'path';
|
|
import http from 'http';
|
|
let server;
|
|
|
|
function pipeFileToResponse(res, file, type) {
|
|
if (type) {
|
|
res.writeHead(200, {
|
|
'Content-Type': type
|
|
});
|
|
}
|
|
|
|
fs.createReadStream(path.join(__dirname, file)).pipe(res);
|
|
}
|
|
|
|
server = http.createServer(function (req, res) {
|
|
req.setEncoding('utf8');
|
|
|
|
const parsed = url.parse(req.url, true);
|
|
let pathname = parsed.pathname;
|
|
|
|
console.log('[' + new Date() + ']', req.method, pathname);
|
|
|
|
if (pathname === '/') {
|
|
pathname = '/index.html';
|
|
}
|
|
|
|
if (pathname === '/index.html') {
|
|
pipeFileToResponse(res, './client.html');
|
|
} else if (pathname === '/axios.js') {
|
|
pipeFileToResponse(res, '../dist/axios.js', 'text/javascript');
|
|
} else if (pathname === '/axios.map') {
|
|
pipeFileToResponse(res, '../dist/axios.map', 'text/javascript');
|
|
} else if (pathname === '/api') {
|
|
let status;
|
|
let result;
|
|
let data = '';
|
|
|
|
req.on('data', function (chunk) {
|
|
data += chunk;
|
|
});
|
|
|
|
req.on('end', function () {
|
|
try {
|
|
status = 200;
|
|
result = {
|
|
url: req.url,
|
|
data: data ? JSON.parse(data) : undefined,
|
|
method: req.method,
|
|
headers: req.headers
|
|
};
|
|
} catch (e) {
|
|
console.error('Error:', e.message);
|
|
status = 400;
|
|
result = {
|
|
error: e.message
|
|
};
|
|
}
|
|
|
|
res.writeHead(status, {
|
|
'Content-Type': 'application/json'
|
|
});
|
|
res.end(JSON.stringify(result));
|
|
});
|
|
} else {
|
|
res.writeHead(404);
|
|
res.end('<h1>404 Not Found</h1>');
|
|
}
|
|
});
|
|
|
|
const PORT = 3000;
|
|
|
|
server.listen(PORT, console.log(`Listening on localhost:${PORT}...`));
|
|
server.on('error', (error) => {
|
|
if (error.code === 'EADDRINUSE') {
|
|
console.log(`Address localhost:${PORT} in use please retry when the port is available!`);
|
|
server.close();
|
|
}
|
|
});
|