Прокси-сервер запроса ПОЛУЧАЕТ правильный URL, но POST не реагирует на приложение с помощью Express API

#javascript #reactjs #api #express

#javascript #reactjs #API #экспресс

Вопрос:

Я настраиваю тестовое веб-приложение react для подключения к моей базе данных sql через express API. Я тестирую на своем локальном компьютере, поэтому я запускаю свое приложение на localhost: 3000 и я запускаю свой сервер на localhost: 4000. Я установил прокси в моем package.json на «http://localhost:4000 «. Запрос GET из моего приложения работает отлично, но мой запрос post — нет.

// функция, которая выполняет запрос POST в моем приложении:

 handleSubmit(event) {
        fetch("/api/users",
            {
                method: "POST", 
                body: JSON.stringify(this.state)
            }
        )
        .then(res => {
            console.log(res);
        });
}
  

функция для обработки этого маршрута на моем сервере:

 router.post('/users', async (req, res, next) => {
    try {
        console.log('row is being added...');
        let results = await db.insertUser(req);
        res.json(results);
    } catch(e) {
        res.json();
        res.sendStatus(500);
    }

});
  

функция db.insertUser, которая вызывается в предыдущей функции:

 testdb.insertUser = (req) => {
    return new Promise((resolve, reject) => {

        pool.query(`INSERT INTO users SET ?`, req.body, (err, results) => {

            if(err) {
                return reject(err);
            }

            return resolve(results);

        });

    })
}
  

Это то, что появляется в консоли моего браузера после попытки отправить запрос POST.

 Response {type: "basic", url: "http://localhost:3000/api/users", redirected: false, status: 200, ok: true, …}
body: (...)
bodyUsed: false
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: "OK"
type: "basic"
url: "http://localhost:3000/api/users"
__proto__: Response
}
  

Это ошибка, которую я получаю со своего сервера после попытки отправки POST

 (node:85386) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
  

Я не совсем уверен, почему запрос POST пытается вызвать localhost: 3000, а не прокси localhost: 4000, который успешно вызывается запросом GET

Обновить:

Это ошибка, которую я сейчас получаю в консоли Chrome

 Insert.js:37 POST http://localhost:3000/api/users 500 (Internal Server Error)
_callee$ @ Insert.js:37
tryCatch @ runtime.js:62
invoke @ runtime.js:288
prototype.(anonymous function) @ runtime.js:114
asyncGeneratorStep @ asyncToGenerator.js:3
_next @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
handleSubmit @ Insert.js:50
callCallback @ react-dom.development.js:147
invokeGuardedCallbackDev @ react-dom.development.js:196
invokeGuardedCallback @ react-dom.development.js:250
invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:265
executeDispatch @ react-dom.development.js:571
executeDispatchesInOrder @ react-dom.development.js:596
executeDispatchesAndRelease @ react-dom.development.js:695
executeDispatchesAndReleaseTopLevel @ react-dom.development.js:704
forEachAccumulated @ react-dom.development.js:676
runEventsInBatch @ react-dom.development.js:844
runExtractedEventsInBatch @ react-dom.development.js:852
handleTopLevel @ react-dom.development.js:5030
batchedUpdates$1 @ react-dom.development.js:21425
batchedUpdates @ react-dom.development.js:2247
dispatchEvent @ react-dom.development.js:5110
(anonymous) @ react-dom.development.js:21482
unstable_runWithPriority @ scheduler.development.js:255
interactiveUpdates$1 @ react-dom.development.js:21481
interactiveUpdates @ react-dom.development.js:2268
dispatchInteractiveEvent @ react-dom.development.js:5086
  

Комментарии:

1. router.post('/users') должно быть router.post('/api/users') нет?

2. при настройке моего сервера с моим маршрутизатором api я использую app.use('/api', apiRouter);

3.Попробуйте статус 500, затем res.json()

4. К вашему сведению: вызовы, идущие на localhost: 3000, верны. Он также не показывает порт прокси в моей локальной настройке.

5. переключение статуса 500 и res.json() исправляет ошибку сервера, чего мне не хватает, чтобы заставить POST работать? Теперь я получаю код ошибки 500, но почему я получаю ошибку?