У меня есть почтовый запрос axios на моем интерфейсе Vue, который отправляет некоторые данные в конечную точку API (экспресс). Проблема в том, что я не вижу никаких данных на контроллере, который получает почтовый запрос.
//app.js
var express = require('express')
var cors = require('cors')
var app = express()
var port = process.env.port || 1337
app.use(cors({origin: true}));
var imagenmatriculaController = require('./controllers/imagenmatriculaController.js')()
app.use("/api/imagenmatricula", imagenmatriculaController)
app.listen(port, function () {})
//imagenmatriculaController.js
var express = require('express')
var router = express.Router()
var routes = function (){
router.route('/')
.post(function(req,res){
console.info(req.data)
res.json('ok')
})
return router
}
module.exports = routes
Я получаю журнал запросов на сервере и возвращаюсь к клиенту, но получаю undefined в console.info(req.data);
//vue post
var headers = {
'Content-Type': 'application/json;charset=UTF-8',
'Access-Control-Allow-Origin': '*'
};
axios.post('http://localhost:1337/api/imagenmatricula', {
headers: headers,
data: 'test'
})
.then(response => {
console.info(response);
}).catch(error => {
console.info(error);
console.info('ERROR::', error.response.data);
});
Чтобы получать данные json на бэкэнд, вам нужно настроить парсер. Вы можете использовать анализатор тела. Тогда ваш код должен выглядеть так
var express = require('express')
var cors = require('cors')
var app = express()
var port = process.env.port || 1337
var bodyParser = require('body-parser')
app.use(cors({origin: true}));
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
var imagenmatriculaController = require('./controllers/imagenmatriculaController.js')()
app.use("/api/imagenmatricula", imagenmatriculaController)
app.listen(port, function () {})
//imagenmatriculaController.js
var express = require('express')
var router = express.Router()
var routes = function (){
router.route('/')
.post(function(req,res){
console.info(req.body)
res.json('ok')
})
return router
}
module.exports = routes
Клиент должен выглядеть так:
var headers = {
'Content-Type': 'application/json;charset=UTF-8',
'Access-Control-Allow-Origin': '*'
};
axios.post('http://localhost:1337/api/imagenmatricula', {
headers: headers,
data: { test: 'test' }
})
.then(response => {
console.info(response);
}).catch(error => {
console.info(error);
console.info('ERROR::', error.response.body);
});
Если ваша маршрутизация на сервере настроена правильно, это должно работать.
Вам нужно иметь парсер тела, чтобы использовать данные json в узле и экспресс. Итак, чтобы заставить ваш код работать. Сначала установите body-parser с помощью команды «npm install body-parser», а затем используйте его в качестве промежуточного программного обеспечения в своем коде, как показано ниже:
var express = require('express')
var cors = require('cors')
var app = express()
var port = process.env.port || 1337
var bodyParser = require('body-parser')
app.use(cors({origin: true}));
//It will parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
//It will parse application/json
app.use(bodyParser.json())
var imagenmatriculaController = require('./controllers/imagenmatriculaController.js')()
app.use("/api/imagenmatricula", imagenmatriculaController)
app.listen(port, function () {})
В imagenmatriculaController.js напишите,
var express = require('express')
var router = express.Router()
var routes = function (){
router.route('/')
.post(function(req,res){
console.info(req.body)
res.json('ok')
})
return router
}
module.exports = routes
Ваш интерфейсный клиент должен содержать следующий код:
var headers = {
'Content-Type': 'application/json;charset=UTF-8',
'Access-Control-Allow-Origin': '*'
};
axios.post('http://localhost:1337/api/imagenmatricula', {
headers: headers,
data: { test: 'test' }
})
.then(response => {
console.info(response);
}).catch(error => {
console.info(error);
console.info('ERROR::', error.response.body);
});
Примечание. Если вы используете более высокую версию экспресса, т.е. v4.16.0, то вместо использования bodyParser.json()
и bodyParser.urlencoded()
вы можете использовать express.json()
и express.urlencoded()
, потому что это встроенное промежуточное программное обеспечение экспресса версии 4.16.0. Так что выбирайте с умом,
app.use(express.json())
app.use(express.urlencoded())
Начиная с Экспресс v4.16.0 нет необходимости использовать анализатор тела, если вы собираетесь анализировать
json
илиurlencoded
полезные нагрузки. Парсинг этих двух теперь реализован как встроенные промежуточные программы: экспресс.json() и экспресс.urlencoded().