Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { NextResponse } from 'next/server';
- import net from 'net';
- export async function POST(request: Request) {
- try {
- const { labelData } = await request.json();
- if (!labelData) {
- return NextResponse.json(
- { error: 'Missing label data in request body' },
- { status: 400 },
- );
- }
- // Get printer configuration from environment variables
- const printerIp = process.env.PRINTER_IP || '172.16.6.13';
- const printerPort = parseInt(process.env.PRINTER_PORT || '9100', 10);
- return await new Promise<NextResponse>((resolve) => {
- const client = new net.Socket();
- // Set connection timeout (5 seconds)
- client.setTimeout(5000);
- client.connect(printerPort, printerIp, () => {
- client.write(labelData, (error) => {
- if (error) {
- resolve(
- NextResponse.json(
- { error: `Failed to write to printer: ${error.message}` },
- { status: 500 },
- ),
- );
- }
- client.end();
- });
- });
- client.on('close', () => {
- resolve(NextResponse.json({ success: true }));
- });
- client.on('error', (err) => {
- resolve(
- NextResponse.json(
- { error: `Printer connection error: ${err.message}` },
- { status: 500 },
- ),
- );
- });
- client.on('timeout', () => {
- client.destroy();
- resolve(
- NextResponse.json(
- { error: 'Printer connection timeout' },
- { status: 500 },
- ),
- );
- });
- });
- } catch (error: any) {
- return NextResponse.json(
- { error: `Internal server error: ${error.message}` },
- { status: 500 },
- );
- }
- }
- // Optionally add other HTTP methods with proper responses
- export async function GET() {
- return NextResponse.json(
- { error: 'Method not allowed. Use POST to send label data.' },
- { status: 405 },
- );
- }
- export async function PUT() {
- return NextResponse.json(
- { error: 'Method not allowed. Use POST to send label data.' },
- { status: 405 },
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment