Я пытаюсь отправить элемент в свою базу данных на моем сервере json. Я отправляю запрос POST из Angular. Когда я это делаю, я получаю следующую ошибку:
Примечание: когда я получаю конечную точку GET, она работает нормально. Я очень новичок на стороне сервера
POST ERROR 404: Http failure response for http://localhost:3000/addMember: 404 Not Found
СЕРВЕР.JS
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const request = require('request');
const app = express();
....
app.use(cors());
app.use(express.static('assets'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.disable('x-powered-by');
app.use(xssFilter());
app.use(nosniff());
app.set('etag', false);
app.use(
helmet({
noCache: true
})
);
app.use(
hsts({
maxAge: 15552000 // 180 days in seconds
})
);
app.use(
express.static(path.join(__dirname, 'dist/softrams-racing'), {
etag: false
})
);
app.get('/api/members', (req, res) => {
request('http://localhost:3000/members', (err, response, body) => {
if (response.statusCode <= 500) {
res.send(body);
}
});
});
// TODO: Dropdown!
app.get('/api/teams', (req, res) => {
request('http://localhost:3000/teams', (err, response, body) => {
if (response.statusCode <= 500) {
res.send(body);
}
});
});
// Submit Form!
app.post('/api/members', function(request, response) {
request.post('http://localhost:3000/members', (err, response, body) => {
if (response.statusCode <= 500) {
req.send(body);
}
});
});
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/softrams-racing/index.html'));
});
app.listen('8000', () => {
console.info('Vrrrum Vrrrum! Server starting!');
});
УГЛОВОЙ
addMember(memberForm: Member) {
this.http.post(`${this.api}/addMember`, memberForm).subscribe(
data => {
console.info('POST Request is successful ', data);
},
error => {
console.info('Error', error);
}
);
}
ОБНОВИТЬ:
в моей консоли я вижу это POST /addMember 404 12.105 ms - 2
и если я захожу в http://localhost:3000/addMember
прямо в браузере я вижу пустой объект {}
и если я захожу сюда http://localhost:3000/
я вижу это сообщение Для доступа и изменения ресурсов вы можете использовать любой HTTP-метод GET POST PUT PATCH DELETE OPTIONS
@Scofield Я обновил вопрос с кодом GET
Кажется, что все, что у вас работает на localhost: 3000, просто не имеет обработчика POST-запросов к URL-адресу, который вы ему дали…
@Scofield, я уже использую запрос, я определил его в верхней части моего файла.
@WillAlexander в моей консоли я вижу это POST /addMember 404 12.105 ms - 2
Если я перехожу к http://localhost:3000/addMember
прямо в браузере, я вижу пустой объект {}
. и если я зайду сюда http://localhost:3000/
я увижу это сообщение To access and modify resources, you can use any HTTP method GET POST PUT PATCH DELETE OPTIONS
Если вы получаете 404, это почти наверняка связано с тем, что все, что там работает, не обрабатывает POST для /addMember. Что именно работает на порту 3000?
@WillAlexander на сервере 3000 - это сервер JSON
Можем ли мы увидеть ваш файл db.json, пожалуйста?
Я подозреваю, что вам нужно отправить запрос POST на /members
, а не на /addMember
@WillAlexander ОМГ! ты гений!
@WillAlexander не стесняйтесь использовать это как ответ
Проблема здесь в том, что вы отправляете запрос POST на маршрут, который не обрабатывает ваш сервер JSON. Измените URL-адрес на http://localhost:3000/members
, и он должен работать нормально!
(Маршруты на json-сервере соответствуют элементам в вашем файле db.json
.)
Попробуйте изменить свой код следующим образом:
addMember(memberForm: Member) {
this.http.post(`${this.api}/api/addMember`, memberForm).subscribe(
data => {
console.info('POST Request is successful ', data);
},
error => {
console.info('Error', error);
}
);
}
Из ошибки видно, что ваш сервис ожидает запрос на http://localhost:3000/api/addMember
, но ваш console.info показывает, что вы отправляете почтовый запрос на http://locatlhost:3000/addMember
Не могли бы вы показать свой код GET API. Похоже, вы пытаетесь вызвать удаленный API внутри своего API. Я думаю, что основной причиной является то, что вы используете параметр
req
для вызова другого API. Можете ли вы попробовать использовать:request = require('request')
вместоreq