@@ -33,6 +33,16 @@ extern "js" fn HttpRequestInternal::on(
3333 handler : (@js.Value ) -> Unit ,
3434) -> Unit = " (s, event, handler) => s.on(event, handler) "
3535
36+ ///|
37+ #borrow (data)
38+ extern " js " fn node_body_chunk_to_bytes(data : @js.Value ) -> Bytes =
39+ #| (data) => {
40+ #| if (data instanceof Uint8Array) {
41+ #| return new Uint8Array(data);
42+ #| }
43+ #| return new TextEncoder().encode(String(data));
44+ #| }
45+
3646///|
3747#borrow (self)
3848extern " js " fn HttpRequestInternal ::headers(
@@ -329,10 +339,12 @@ pub fn listen_ffi(mocket : Mocket, address : String) -> Unit {
329339 async_run(() => {
330340 // 如果是 post,先等待 data 事件
331341 if event.req.http_method == "POST " {
332- let buffer = @buffer.new ()
342+ let buffer = Buffer ()
333343 (try? suspend(fn(res, _) {
334- req.on("data", data => buffer.write_string(data.to_string()))
335- req.on("end", _ => res(buffer.to_string()))
344+ req.on("data", data => {
345+ buffer.write_bytes(node_body_chunk_to_bytes(data))
346+ })
347+ req.on("end", _ => res(()))
336348 }))
337349 |> ignore
338350 event.req.raw_body = buffer.to_bytes()
@@ -358,7 +370,7 @@ pub fn listen_ffi(mocket : Mocket, address : String) -> Unit {
358370 headers_obj
359371 },
360372 )
361- let buf = @buffer.new ()
373+ let buf = Buffer ()
362374 responder.output(buf)
363375 event.res.raw_body = buf.to_bytes()
364376 res.end(@js.Value ::cast_from(event.res.raw_body))
@@ -446,14 +458,14 @@ pub fn __ws_emit_js_port(
446458 }
447459 let peer = WebSocketPeer ::{ connection_id, subscribed_channels: [] }
448460 match event_type {
449- "open" => handler(WebSocketEvent :: Open (peer))
461+ "open" => handler(Open (peer))
450462 "message" => {
451463 let msg = @utf8.decode(payload) catch { _ => "" }
452- handler(WebSocketEvent :: Message (peer, Text (msg)))
464+ handler(Message (peer, Text (msg)))
453465 }
454- "binary" => handler(WebSocketEvent :: Message (peer, Binary (payload)))
455- "ping" => handler(WebSocketEvent :: Message (peer, Ping ))
456- "close" => handler(WebSocketEvent :: Close (peer))
466+ "binary" => handler(Message (peer, Binary (payload)))
467+ "ping" => handler(Message (peer, Ping ))
468+ "close" => handler(Close (peer))
457469 _ => ()
458470 }
459471}
0 commit comments