javascript - 通过 Express、Axios 在 MySQL PUT 和 DELETE 上出现错误 500

标签 javascript mysql express redux axios

我刚刚继承了一个项目,该项目是使用我不太熟悉的工具随意构建的。它使用 Express、Bookshelf 和 A​​xios 来访问 MySQL 数据库。 GET 和 PUT 的 Express 路由似乎工作得很好,但 POST 和 DELETE 都会导致错误 500。

以下是我正在使用的路由(我删除了更多可以正常工作的 GET 和 POST 路由):

import express from 'express';
import Points from '../models/points';

let router = express.Router();

// GET all points associated with a specific user AND a specific session
// This works fine.
router.get('/user/:user/session/:session', (req, res) => {
    Points.query({
        select: ['id', 'number', 'quadrant', 'level', 'title', 'category'],
        where: {sessionId: req.params.session, userId: req.params.user}
    }).fetchAll().then(point => {
        res.json({point});
    })
});

// POST a single point to the database.
// This works fine.
router.post('/', (req, res) => {
    const {sessionId, userId, number, quadrant, level, title, category} = req.body;

    Points.forge({
        sessionId, userId, number, quadrant, level, title, category
    }).save()
        .then(user => res.json({success: true}))
        .catch(err => res.status(500).json({error: err}));
});

// PUT (update) an existing point
// Doesn't work right now (500)
router.put('/edit/:identifier', (req, res) => {
    Points.update({
        set: {title: req.params.title},
        where: {id: req.params.identifier}
    }), function (err, point) {
        if (err) {
            return res.send(err);
        }
        res.json({message: 'Updated'});
    };
});

// DELETE a point by id
// Doesn't work right now (500)
router.delete('/delete/:identifier', (req, res) => {
    Points.remove({
        id: req.params.identifier
    }), function (err, point) {
        if (err) {
            return res.send(err);
        } else {
            res.json({message: 'Deleted'});
        }
    };
});

export default router;

以下是与上述路由相对应的 Redux 操作:

import axios from 'axios';


export function getPointsByUserAndSession(data) {
    return dispatch => {
        return axios.get('/api/points/user/'+data.user+'/session/'+data.session)
    }
}

export function addPoint(data) {
    return dispatch => {
        return axios.post('/api/points', data)
    }
}

export function editPointById(data) {
    return dispatch => {
        return axios.put('/api/points/edit/' + data.id)
    }
}

export function deletePointById(identifier) {
    return dispatch => {
        return axios.delete('/api/points/delete/' + identifier)
    }
}

最佳答案

使用以下代码启用 CORS:

 router.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, x-access-token');
  res.header('Access-Control-Allow-Methods', 'GET, POST,OPTIONS, DELETE, PATCH, PUT');
  next();
});

关于javascript - 通过 Express、Axios 在 MySQL PUT 和 DELETE 上出现错误 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994009/

相关文章:

javascript - JQuery 函数在另一个函数中调用

mysql - 如何找到 phpmyadmin SQL 密码加密类型?

javascript - 如何使用 Handlebars 编写一行 If 语句?

PHP 无法在服务器上运行

mysql - 有没有更简单的方法来执行此查询

download - 在 angularjs 和express.js 之间进行下载

javascript - 从同一对象内的函数访问对象属性

javascript - 输入和文本函数

javascript - 在加载的网页顶部添加一个按钮

javascript - 复杂数据作为可选的 JavaScript 函数参数