Ошибка CORS при добавлении данных формы в бэкэнд - PullRequest
0 голосов
/ 21 января 2020

Новичок в использовании vue и express здесь. Я пытался следовать определенному руководству, в котором они добавляют данные простой формы в базу данных, но по какой-то причине оно выдает мою ошибку:

Доступ к XMLHttpRequest по адресу http://localhost: 3000 / create 'from origin' http://localhost: 8080 'заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: не имеет статуса HTTP ok .

Вот что я сделал в бэкэнде:

app.use('/create',(req,res,next)=>{
    res.set({
        "Access-Control-Allow-Origin":"http://localhost:8080",
        "Access-Control-Allow-Headers":"Content-Type",
    })
    var mysql = require('mysql')
    var connection = mysql.createConnection(config)
    // SET ?
    // `FirstName`=?, `LastName`=?, `Email`=?, `ContactNumber`=?
    // [req.body.FirstName,req.body.LastName,req.body.Email,req.body.ContactNumber]
    var sql = "INSERT INTO `guest` SET `FirstName`=?, `LastName`=?, `Email`=?, `ContactNumber`=?"
    connection.query(sql,[req.body.FirstName,req.body.LastName,req.body.Email,req.body.ContactNumber],(err,results,fields)=>{
        connection.end()
        if(err){
            next(err)
        }else{
            res.json([true,results]) //.insertId
        }
    })
})

и во внешнем интерфейсе:

<b-form v-model="contactForm" @submit="check();addGuest();" @reset="onReset" v-if="show"> 
                          <b-form-group
                            id="input-group-1"
                            label="Email address:"
                            label-for="input-1"
                            description="Give us an email to give a receipt to"
                          >
                            <b-form-input
                              id="input-1"
                              v-model="contactForm.Email"
                              type="email"
                              required
                              placeholder="Enter email"
                            ></b-form-input>
                          </b-form-group>

                          <b-form-group id="input-group-2" label="Your Name:" label-for="input-2">
                            <b-form-input
                              id="input-2"
                              v-model="contactForm.FirstName"
                              required
                              placeholder="Enter first name"
                            ></b-form-input>
                            <b-form-input
                              id="input-3"
                              v-model='contactForm.LastName'
                              required
                              placeholder="Enter last name"
                            ></b-form-input>
                          </b-form-group>

                        <b-form-group
                            id="input-group-3"
                            label="Contact Number"
                            label-for="input-3"
                            description="Give us a contact number to give a receipt to"
                          >
                            <b-form-input
                              id="input-4"
                              v-model='contactForm.ContactNumber'
                              type="tel"
                              required
                              placeholder="Enter Contact Number"
                            ></b-form-input>
                          </b-form-group>



                          <b-button type="submit" variant="primary">Submit</b-button>
                          <b-button type="reset" variant="danger">Reset</b-button>
                        </b-form>

Сценарий метода:

addGuest(){
                //POST a guest
                // evt.preventDefault()
                // console.log(this.contactForm)

                axios.post('http://localhost:3000/create',this.contactForm)
                .then((res)=>{
                    console.log(res.data)
                })
                .catch((err)=>{
                    alert('AJAX error')
                })
            }

Я что-то упускаю здесь? Я буквально только что изменил то, что видел в уроке.

1 Ответ

1 голос
/ 22 января 2020

Не так просто "активировать" Access-Control-Allow-Origin в Express - но это тоже не сложно:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "YOUR-DOMAIN.TLD"); // update to match the domain you will make the request from
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.get('/', function(req, res, next) {
  // Handle the get for this route
});

app.post('/', function(req, res, next) {
 // Handle the post for this route
});

Источник: https://enable-cors.org/server_expressjs.html

Вы должны установить res.header и передать его Express для используйте эту настройку.

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