Не удается POST выразить приложение, когда Content-Type является application / json - PullRequest
0 голосов
/ 24 сентября 2019

В настоящее время я пишу для REST API, который использует JSON для взаимодействия в машинописи и nodejs.

После того, как я написал свой первый маршрут, я хотел проверить его с помощью почтальона, но получил ответ, что не смогPOST to / login (/ login - это первый маршрут, который я реализовал).

После нескольких часов попыток и изменений, несколько раз проверяя, правильно ли я все написал, и, как и в предыдущих проектах, я понял, чтоЯ получаю эту ошибку всякий раз, когда у меня в заголовке Content-Type в Postman установлено значение application / json.

Я снова проверил, действительно ли я использовал body-parser, и уже в index.ts я использовал строку

const express = require('express');
import * as bodyParser from 'body-parser'

(async function() {
const app = express();
app.use(bodyParser.json());

app.listen(8080);
})();

Я просто не знаю, в чем может быть ошибка.

Изменить, чтобы включить больше кода

index.ts

require('dotenv').config();
// import * as bodyParser from 'body-parser';
const bodyParser = require('body-parser');
import * as cors from 'cors';
import {routes} from './routes';
import {errorHandler} from './middleware/error';

const express = require('express');

import {registerServices, ServiceLocator} from './serviceLocator/ServiceLocator';
// import {initialization} from './initialization';

(async function() {
    const serviceLocator = new ServiceLocator();
    await registerServices(serviceLocator);

    await serviceLocator.get("PostgresConnector")._connect();

    // await initialization(serviceLocator);

    const app = express();

    app.locals.serviceLocator = serviceLocator;

    app.use(bodyParser.json());
    app.use(cors());
    routes.forEach(route => app.use(route));

    app.use(errorHandler);

    app.listen(8080, () => console.log('\x1b[32m%s\x1b[0m', 'Server started'));
})();

index.ts в папке маршрутов

import {authenticationRouter} from "./authentication";

const routes = [
    authenticationRouter
];

export {routes};

authentication.ts

import {UserNotFoundError} from "../user/UserRepository";

const router = require('express').Router();
import {validateBody} from '../middleware/bodyValidator';
import {wrapAsync as wa} from '../middleware/wrapAsync';

const loginSchema = {
    type: 'object',
    properties: {
        email: {
            type: 'string'
        },
        password: {
            type: 'string'
        }
    },
    required: ['email', 'password'],
    additionalProperties: false
};

router.post('/login', validateBody(loginSchema), wa(async (req, res) => {
    const sl = res.app.locals.serviceLocator;
    const loginController = sl.get('LoginController');

    const {email, password} = req.body;
    try {
        const token = await loginController.login(email, password);

        res.json({
            token
        });
    } catch (e) {
        if(typeof e === typeof UserNotFoundError) {
            res.status(403).json({
                message: 'Not successful',
                reason: 'Username or password wrong'
            });
        }
    }
}));

export {router as authenticationRouter};
...