Runtime(Server / Middleware / Utils)¶
本ページは サーバ起動・配線(server.js)/共通ミドルウェア/ユーティリティを 1 つに集約した実行時ガイドです。
Routes/Socket/Services と連携し、HTTP と WebSocket を束ねます。
概要¶
- Express: JSON 受け取り・API ルーティング
- HTTP Server: Express をラップして Socket.IO をぶら下げる
- Socket.IO:
initSocket(server)一度だけ初期化 →getIO()で参照 - エラーハンドラ:
next(err)で集約し、err.status || 500を返す
起動フロー(server.js)¶
1) .env 読込(dotenv)
2) app = express() → express.json() / bodyParser.json()
3) server = http.createServer(app)
4) initSocket(server) → const io = getIO()
5) app.use('/', routes(io))(内部で /api 配下を束ね)
6) 最後に共通 エラーハンドラ を登録
7) if (require.main === module) → server.listen(PORT)(既定 3000)
環境変数
PORT… HTTP リッスンポート(既定3000)- (参考)OpenAI 利用時:
OPENAI_API_KEY/OPENAI_MODEL/OPENAI_MAX_TOKENS
エラー方針
- ルート/サービス層で
err.statusを付けてnext(err) - タイムアウトは 504 相当で扱うのを推奨(実装が 500 の箇所は置き換え候補)
Middleware¶
validationResult(middlewares/validationResult.js)¶
express-validator の検証結果をチェックし、400 を返す共通ミドルウェア。
module.exports = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
next();
};
適用例
router.get('/', validators.validateList, validationResult, controller.list);
utils¶
extractFileNameFromUrl(utils/fileUtils.js)¶
URL からファイル名のみを安全に抽出(失敗時は 'unknown')。
function extractFileNameFromUrl(fileUrl) {
try {
return new URL(fileUrl).pathname.split('/').pop() || 'unknown';
} catch {
return 'unknown';
}
}
使用箇所例
/api/uploads/image|video… 外部 URL から Buffer 取得後、<timestamp>-<original>