Запуск сервера разработки Express TypeScript выбрасывает TypeErrors, но не когда я строю и запускаю егоJavascript

Форум по Javascript
Ответить
Anonymous
 Запуск сервера разработки Express TypeScript выбрасывает TypeErrors, но не когда я строю и запускаю его

Сообщение Anonymous »

Я расширил нативный объект запроса Express, используя < /p>
// 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:1077:36)
at Object.compile (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts:1433:41)
at Module.m._compile (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts:1617:30)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Object.require.extensions. [as .ts] (C:\Programming Workspaces\WebDev\ElectiveManagementSystem\server\node_modules\ts-node\src\index.ts:1621:12)
at Module.load (node:internal/modules/cjs/loader:1207:32)
at Function.Module._load (node:internal/modules/cjs/loader:1023:12)
at Module.require (node:internal/modules/cjs/loader:1235:19) {
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»