abdurahman_argoebie

ssr print

May 2nd, 2025
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. import { NextResponse } from 'next/server';
  2. import net from 'net';
  3.  
  4. export async function POST(request: Request) {
  5. try {
  6. const { labelData } = await request.json();
  7.  
  8. if (!labelData) {
  9. return NextResponse.json(
  10. { error: 'Missing label data in request body' },
  11. { status: 400 },
  12. );
  13. }
  14.  
  15. // Get printer configuration from environment variables
  16. const printerIp = process.env.PRINTER_IP || '172.16.6.13';
  17. const printerPort = parseInt(process.env.PRINTER_PORT || '9100', 10);
  18.  
  19. return await new Promise<NextResponse>((resolve) => {
  20. const client = new net.Socket();
  21.  
  22. // Set connection timeout (5 seconds)
  23. client.setTimeout(5000);
  24.  
  25. client.connect(printerPort, printerIp, () => {
  26. client.write(labelData, (error) => {
  27. if (error) {
  28. resolve(
  29. NextResponse.json(
  30. { error: `Failed to write to printer: ${error.message}` },
  31. { status: 500 },
  32. ),
  33. );
  34. }
  35. client.end();
  36. });
  37. });
  38.  
  39. client.on('close', () => {
  40. resolve(NextResponse.json({ success: true }));
  41. });
  42.  
  43. client.on('error', (err) => {
  44. resolve(
  45. NextResponse.json(
  46. { error: `Printer connection error: ${err.message}` },
  47. { status: 500 },
  48. ),
  49. );
  50. });
  51.  
  52. client.on('timeout', () => {
  53. client.destroy();
  54. resolve(
  55. NextResponse.json(
  56. { error: 'Printer connection timeout' },
  57. { status: 500 },
  58. ),
  59. );
  60. });
  61. });
  62. } catch (error: any) {
  63. return NextResponse.json(
  64. { error: `Internal server error: ${error.message}` },
  65. { status: 500 },
  66. );
  67. }
  68. }
  69.  
  70. // Optionally add other HTTP methods with proper responses
  71. export async function GET() {
  72. return NextResponse.json(
  73. { error: 'Method not allowed. Use POST to send label data.' },
  74. { status: 405 },
  75. );
  76. }
  77.  
  78. export async function PUT() {
  79. return NextResponse.json(
  80. { error: 'Method not allowed. Use POST to send label data.' },
  81. { status: 405 },
  82. );
  83. }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment