// types/express.d.ts
import { User } from '../UserTypes'; // Ensure this is correct
declare global {
namespace Express {
interface Request {
user: User;
}
}
}
< /code>
Но мой код выбрасывает ошибку из файла < /p>
import { NextFunction, Request, Response } from 'express';
import jwt from 'jsonwebtoken';
import { prisma } from '../prismaClient';
const authMiddleware = async (
req: Request,
res: Response,
next: NextFunction,
): Promise => {
const token = req.cookies.jwt;
if (!token) {
return res.status(401).json({ message: "Unauthorized: No token provided" });
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET as string) as {
id: string;
};
const credential = await prisma.credential.findUnique({
where: { id: decoded.id },
include: {
student: true,
faculty: true,
admin: true,
},
});
if (!credential) {
return res.status(401).json({ message: "Unauthorized: User not found" });
}
req.user = {
id: credential.id,
role: credential.role,
student: credential.student,
faculty: credential.faculty,
admin: credential.admin,
};
next();
} catch (error) {
console.error("JWT verification or database error:", error);
return res.status(401).json({ message: "Unauthorized: Invalid token" });
}
};
export default authMiddleware;
< /code>
, когда я пытаюсь запустить сервер разработки, используя «nodemon index.ts» или «node-st index.ts»
он не бросает эту ошибку, если я создам ее в JS И запустите сборку, но только когда я запускаю TS напрямую. Это даже не бросает никакой ошибки, когда я запускаю "tsc --noemit" < /p>
Это мой модифицированный tsconfig.json < /p>
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"outDir": "./dist",
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"skipLibCheck": true,
"rootDir": "./src",
"typeRoots": ["./node_modules/@types", "./src/types"],
"types": ["node", "express"]
},
"exclude": ["src/scripts"]
}
< /code>
Ошибка выбрана:-< /p>
PS C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server> npm run dev
> server@1.0.0 dev
> ts-node src/index.ts
C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts:859
return new TSError(diagnosticText, diagnosticCodes, diagnostics);
^
TSError: ⨯ Unable to compile TypeScript:
src/middleware/authMiddleware.ts:34:9 - error TS2339: Property 'user' does not exist on type 'Request'.
34 req.user = {
~~~~
at createTSError (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts:859:12)
at reportTSError (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts:863:19)
at getOutput (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts
at Object.compile (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts
at Module.m._compile (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts
at Module._extensions..js (node:internal/modules/cjs/loader
at Object.require.extensions. [as .ts] (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts
at Module.load (node:internal/modules/cjs/loader
at Function.Module._load (node:internal/modules/cjs/loader
at Module.require (node:internal/modules/cjs/loader
diagnosticCodes: [ 2339 ]
}
PS C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server>
< /code>
Вот где я использую authmiddleware.ts < /p>
import express from 'express';
import BranchController from '../controllers/BranchController';
import { authorizeRoles } from '../middleware/roleMiddleware';
import { UserRole } from '@prisma/client';
const router = express.Router();
/**
* @swagger
* tags:
* name: Branches
* description: API endpoints for managing branches
*/
/**
* @swagger
* /branches:
* get:
* summary: Get all branches
* tags: [Branches]
* parameters:
* - in: query
* name: departmentId
* schema:
* type: string
* description: Optional department ID to filter branches
* responses:
* 200:
* description: Successfully retrieved all branches
* content:
* application/json:
* schema:
* type: array
* items:
* type: object
* 500:
* description: Unable to fetch branches
*/
router.get(
"/",
authorizeRoles([UserRole.ADMIN]),
BranchController.getAllBranches,
);
/**
* @swagger
* /branches/{id}:
* get:
* summary: Get a branch by ID
* tags: [Branches]
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: string
* description: The branch ID
* responses:
* 200:
* description: Successfully retrieved the branch
* content:
* application/json:
*
* 404:
* description: Branch not found
* 500:
* description: Unable to fetch branch
*/
router.get(
"/:id",
authorizeRoles([UserRole.ADMIN]),
BranchController.getBranchByID,
);
export default router;
Подробнее здесь: https://stackoverflow.com/questions/794 ... t-when-i-b
Мобильная версия