Comments (4)
I took some time into it. I made a pr #37 to fix this.
superagent has 2 implementations: One for browser, one for nodejs. This project uses jspm.dev
, which packs the browser version of superagent by default.
The browser version depends on XHR to handle form-data. And in xhrSham.js, form-data is stringified, so fetch doesn't process it the right way.
The fix is to pass FormData directly to fetch. Fetch is able to handle form-data by itself.
from superdeno.
Hey @c0per 👋
Hmm sorry multipart form data isn't working out 😅 do you have a simple oak server example code that you can share which can be used to test against for debugging this?
from superdeno.
server.ts
import {
Application,
Router,
RouterContext,
} from "https://deno.land/x/[email protected]/mod.ts";
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";
export const app = new Application();
const router = new Router();
router.post("/endpoint", async (ctx: RouterContext) => {
// Content-Type should be multipart/form-data
console.log(ctx.request.headers.get("content-type"));
// body should be "form-data"
const body = ctx.request.body();
assertEquals(body.type, "form-data");
// printing form value
console.log(await body.value);
ctx.response.status = 200;
});
app.use(router.routes());
app.use(router.allowedMethods());
server.test.ts
import { app } from "./server.ts";
import { superoak } from "https://deno.land/x/[email protected]/mod.ts";
import { superdeno } from "https://deno.land/x/[email protected]/mod.ts";
Deno.test("multipart/form-data", async (t) => {
const pathToFile = "./test.jpg";
await t.step("superoak", async () => {
const req = await superoak(app);
await req
.post("/endpoint")
.field("form_key", "form_value")
.attach("file_key", pathToFile, "filename")
.expect(200);
});
await t.step("superdeno", async () => {
const controller = new AbortController();
const { signal } = controller;
app.addEventListener("listen", async ({ hostname, port, secure }) => {
const protocol = secure ? "https" : "http";
const url = `${protocol}://${hostname}:${port}`;
await superdeno(url)
.post("/endpoint")
.field("form_key", "form_value")
.attach("file_key", pathToFile, "filename")
.expect(200);
});
await app.listen({ port: 0, signal });
});
});
from superdeno.
Released in https://github.com/asos-craigmorten/superdeno/releases/tag/4.6.1 - thanks for your contribution 😄
from superdeno.
Related Issues (20)
- Submitting a payload with a get request results in request termination error HOT 5
- 4xx and 5xx response missing body and text HOT 4
- [BUG] Error thrown on empty body responses (e.g. 304)
- Consider using Pagic to build the website? HOT 1
- [BUG] res.header vs res.headers typescript issues
- [CHORE] Use Deno's inspect instead of one from NPM HOT 2
- SuperDeno does not process headers in the response from Opine HOT 4
- Re-introduce multiple cookie headers in test HOT 1
- Question: testing if header doesn't exist HOT 2
- Expected "Hello World" response body, got "HTTP/1.1 20" HOT 10
- Support new [email protected]/http API HOT 3
- Error: Request has been terminated for native http server HOT 4
- Getting async leaking error when testing opine v2 HOT 3
- Attach is possibly not sending the actual file to the app HOT 1
- `HandlerLike` signature doesn't match actual `server.Handler`. Missing `connInfo` HOT 5
- Question: How to run superdeno with plain deno server HOT 2
- Can this be used with `express`? HOT 1
- How does superdeno intercept redirects? HOT 8
- Release 1.5 causing an error on download HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from superdeno.