Не могу получить данные от Axios на API - PullRequest
2 голосов
/ 09 апреля 2019

У меня есть запрос post 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.log(req.data)
            res.json('ok')
        })
        return router
}

module.exports = routes

Я получаю журнал запросов на сервере и возвращаю 'ok' клиенту, но я получаю неопределенное в console.log (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.log(response);
                }).catch(error => {
                    console.log(error);
                    console.log('ERROR::', error.response.data);
                });

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Для получения данных json на бэкэнд необходимо настроить парсер.Вы можете использовать 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}));
// 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.log(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.log(response);
                    }).catch(error => {
                        console.log(error);
                        console.log('ERROR::', error.response.body);
                    });

Если ваша маршрутизация на сервере настроена правильно, это должно работать.

0 голосов
/ 09 апреля 2019

Вам нужно иметь body-parser, чтобы использовать данные json в node и express.Итак, чтобы ваш код работал.Сначала установите 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.log(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.log(response);
                    }).catch(error => {
                        console.log(error);
                        console.log('ERROR::', error.response.body);
                    });

Примечание :: Если вы используете более высокую версию express, т.е. v4.16.0, тогда вместо использования bodyParser.json() и bodyParser.urlencoded() вы можете использовать express.json()и express.urlencoded(), потому что это встроенное промежуточное ПО Express от версии v4.16.0.Так что выбирайте мудро,

app.use(express.json())
app.use(express.urlencoded())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...