Я работаю над полнофункциональным приложением, использующим Next.js и TypeScript, и мне нужно использовать Socket.IO для функций реального времени. Для этого я создал собственный сервер (src/server.ts) для настройки Socket.IO при запуске.
Все работает отлично в режиме разработки, когда я запускаю приложение, используя:
import next from "next";
import { Server } from "socket.io";
import logger from "./logger";
const dev = process.env.NODE_ENV !== "production";
const hostname = process.env.APP_HOSTNAME;
const port = Number(process.env.APP_PORT) || 3000;
const app = next({ dev, hostname, port });
const handler = app.getRequestHandler();
app
.prepare()
.then(() => {
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const server = createServer(handler);
const io = new Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"],
},
});
io.on("connection", (socket) => {
logger.info("A client connected");
socket.on("disconnect", () => {
logger.info("Client disconnected");
});
});
server
.once("error", (err) => {
console.error(err);
process.exit(1);
})
.listen(port, () => {
logger.info(`Server started on http://${hostname}:${port}`);
});
})
.catch((error: unknown) => {
logger.error("Error starting the server: ", error);
process.exit(1);
});
Я подозреваю, что проблема связана с тем, как Next.js обрабатывает выходные данные сборки в производственном режиме. Я новичок в Next.js и TypeScript, поэтому могу упустить что-то важное. Я также попытался добавить вывод: «автономный», но проблема все еще возникает.
package.json
Проверил документацию по пользовательским серверам, но не нашел ничего конкретного по этой проблеме. Искал в интернете похожие проблемы, но точного совпадения не нашел. Кто-нибудь сталкивался с этой проблемой или чем-то подобным? Что может быть причиной этой синтаксической ошибки?
Заранее спасибо!
Я работаю над полнофункциональным приложением, использующим Next.js и TypeScript, и мне нужно использовать Socket.IO для функций реального времени. Для этого я создал собственный сервер (src/server.ts) для настройки Socket.IO при запуске. Все работает отлично в режиме разработки, когда я запускаю приложение, используя: [code]npm run dev [/code] Однако, когда я пытаюсь запустить приложение в рабочем режиме, я сталкиваюсь с проблемами. Вот как я его запускаю: [list] [*]Создаю приложение: [/list] [code]next build [/code] [list] [*]Запуск сервера: [/list] [code]npm run start [/code] Сервер запускается без ошибок, но при доступе к любой странице в браузере появляется следующая ошибка: [code]SyntaxError: Invalid left-hand side in for-in loop: Must have a single binding. at (.next/server/chunks/675.js:3414) [/code] Вот мой файл src/server.ts: [code]import next from "next"; import { Server } from "socket.io"; import logger from "./logger";
const dev = process.env.NODE_ENV !== "production"; const hostname = process.env.APP_HOSTNAME; const port = Number(process.env.APP_PORT) || 3000;
server .once("error", (err) => { console.error(err); process.exit(1); }) .listen(port, () => { logger.info(`Server started on http://${hostname}:${port}`); }); }) .catch((error: unknown) => { logger.error("Error starting the server: ", error); process.exit(1); });
[/code] Я подозреваю, что проблема связана с тем, как Next.js обрабатывает выходные данные сборки в производственном режиме. Я новичок в Next.js и TypeScript, поэтому могу упустить что-то важное. Я также попытался добавить вывод: «автономный», но проблема все еще возникает. package.json [code]{ "name": "nextjsapp", "version": "1.0.0", "description": "Template for web apps", "main": "dist/index.js", "scripts": { "dev": "ts-node src/server.ts", "build": "next build", "start": "NODE_ENV=production ts-node src/server.ts", "lint": "next lint", "prettier:format": "prettier --write .", "prettier:check": "prettier --check .", "component-tests": "cypress run --component", "e2e:chrome": "cypress run --e2e --browser chrome", "e2e:edge": "cypress run --e2e --browser edge", "commitlint": "commitlint --from develop --to HEAD", "check-updates": "npx npm-check-updates -u", "test": "jest", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "prepare": "if [ \"$SKIP_HUSKY\" = \"true\" ]; then echo 'Skipping husky'; else husky; fi" }, "private": true, "dependencies": { "@braintree/sanitize-url": "7.1.0", "@mdi/js": "7.4.47", "@mdi/react": "1.6.1", "@newrelic/next": "0.10.0", "@serwist/next": "9.0.11", "classnames": "^2.5.1", "dayjs": "1.11.13", "kafkajs": "2.2.4", "mssql": "11.0.1", "newrelic": "12.9.0", "next": "15.1.2", "next-auth": "4.24.11", "react": "19.0.0", "react-dom": "19.0.0", "react-toastify": "11.0.2", "sass": "^1.83.0", "sharp": "0.33.5", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1" }, "devDependencies": { "@chromatic-com/storybook": "^3.2.3", "@commitlint/cli": "19.6.1", "@commitlint/config-conventional": "19.6.0", "@eslint/js": "9.17.0", "@storybook/addon-essentials": "^8.4.7", "@storybook/addon-interactions": "^8.4.7", "@storybook/addon-onboarding": "^8.4.7", "@storybook/blocks": "^8.4.7", "@storybook/nextjs": "^8.4.7", "@storybook/react": "^8.4.7", "@storybook/test": "^8.4.7", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/jest": "^29.5.14", "@types/jira-client": "7.1.9", "@types/mssql": "9.1.5", "@types/newrelic": "9.14.6", "@types/node": "22.10.2", "@types/react": "19.0.2", "@types/react-dom": "19.0.2", "@types/sharp": "0.31.1", "cypress": "13.17.0", "dotenv": "16.4.7", "eslint": "9.17.0", "eslint-config-next": "15.1.2", "eslint-config-prettier": "9.1.0", "eslint-plugin-cypress": "4.1.0", "eslint-plugin-storybook": "^0.11.1", "husky": "^9.1.7", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jira-client": "8.2.2", "npm-check-updates": "^17.1.11", "prettier": "3.4.2", "serwist": "9.0.11", "start-server-and-test": "2.0.9", "storybook": "^8.4.7", "ts-node": "^10.9.2", "typescript": "5.7.2", "typescript-eslint": "8.18.1" }, "browserslist": [ ">0.3%", "last 2 versions", "not dead" ], "eslintConfig": { "extends": [ "plugin:storybook/recommended" ] } }
[/code] Проверил документацию по пользовательским серверам, но не нашел ничего конкретного по этой проблеме. Искал в интернете похожие проблемы, но точного совпадения не нашел. Кто-нибудь сталкивался с этой проблемой или чем-то подобным? Что может быть причиной этой синтаксической ошибки? Заранее спасибо!
Я пытаюсь реализовать интернационализацию, используя React-I18N в моем приложении Frontend. Потому что сервер рендер HTML не совпадал с клиентом. В результате это дерево будет восстановлено на клиенте. Это может произойти, если используется...
Я пишу приложение Next.js с помощью файла Custom Server.js , и я не могу загрузить свой CSS - я продолжаю получать следующее в консоли браузера:
The resource from “
static/development/pages/index.js?ts=1552499710032”
was blocked due to MIME type...
Мои данные поступают из конечной точки API X. Мое бэкэнд приложение C# приносит данные и отправляет их на приложение Frontend React. Это хорошо работает в моем местном доме. Но после развертывания на сервере я обнаружил, что данные не находятся в...
У меня есть приложение Next.js, и мне нужно получить метаданные от API. Я написал базовый запрос на выборку в GenerateMetAdata в page.tsx. В локальном или любом другом домене HTTPS все работает нормально, но в нашем производственном домене я не могу...
У меня есть приложение Next.js, и мне нужно получить метаданные от API. Я написал базовый запрос на выборку в GenerateMetAdata в page.tsx. В локальном или любом другом домене HTTPS все работает нормально, но в нашем производственном домене я не могу...