Ryne
Ryne

Reputation: 1415

data is not being sent by POST, reads OPTIONS in console

I have a react redux app where I am posting data to my node (express) server. In my action creator the data is being sent to the server but it isn't responding to the file. Here's my action creator.

// action creator
export function addItem(product) {
    return dispatch => {
        dispatch(request(product));

        axios.post(api + '/api/addtoinventory', { product })
        .then(res => {
            dispatch(success(product));
        })
        .catch(err => {
            dispatch(failure(err.toString()));
        });
    }

    function request(product) { return { type: ADDING_ITEM, product } }
    function success(product) { return { type: ITEM_ADDED, product } }
    function failure(error) { return { type: ADD_TOAST, payload: error} }
}

Then in my express file I have code like this..

// server.js
var express = require('express');
var router = express.Router();
var multer = require('multer');
var uuidv4 = require('uuid/v4');
var path = require('path');
var database = require('./database');

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, '../../../adminpanel/src/0000001');
    },
    filename: (req, file, cb) => {
        const newFilename = `${uuidv4()}${path.extname(file.originalname)}`;
    cb(null, newFilename);
    }
});


const upload = multer({ storage });

router.post('/', function(req, res) {

    var title = req.body.product.title;
    var price = req.body.product.price;
    var description = req.body.product.description;

    database.query("INSERT INTO `Items` (`ID`, `Title`, `Price`, `Description`, `CreateDate`) VALUES (NULL, ?, ?, ?, CURRENT_TIMESTAMP)", [title, price, description], function(err, result) {
        if(err) {
            console.log(err);
        } else {
            var id = result.insertId;

            console.log(id);
        }
    });

});

module.exports = router;

Then when i check for the console log I just get this in return

OPTIONS /api/addtoinventory 200 10.300 ms - 4

Shouldn't that say POST instead of OPTIONS ?

Upvotes: 1

Views: 31

Answers (1)

Suresh Prajapati
Suresh Prajapati

Reputation: 4467

You need to create a middleware which will allow CORS for your registered req origins

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'your domain here');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');

    next();
}

Then in your startup file include this middleware

app.use(allowCrossDomain);

If you want to read about it more https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests

Upvotes: 2

Related Questions