首页 > 解决方案 > 测试 Postman 后端 API 时的表单数据帖子 - Node / Sequelize / Postgres

问题描述

我正在尝试使用 Postman 测试我的后端 API,并且我不断收到约束错误(因为 Sequelize),或者在这种情况下出现错误说我正在尝试为我的代码的 tect 位置行插入“类型整数的无效输入语法” . 我的这个 API 和 postgres 的模型都将各自的字段设置为 TEXT 但是它仍然在第一个字段的 Postman 表单数据上给我这个错误。

因为我有一个要插入的文件,所以我必须通过 form-data 方法执行此操作,因为我知道如何以“原始”方式执行此操作没问题。这是处理 Postman 表单数据时的常见错误吗?我的表单有文本、整数和文件

这与我的数据解析方式有关吗?我以前在教程中看到过强大的使用,我已经在使用 Multer 将我的文件存储在路由中,并且 API 正在将 URL 保存到 Postgres(理论上)。

![[1]: https://i.stack.imgur.com/51PZQ.png

exports.createDiveSpot = async (req, res) => {

    const fileNameWithExtension = `${req.file.filename}-${req.file.originalname}`
    const newPath = `./assets/diveSpot/${fileNameWithExtension}`

    fs.rename(req.file.path, newPath, function (err) {
        if (err) {
            console.log(err)
            res.send(500)
        }
        diveSpot.create({
            diveLocation: req.body.diveLocation,
            diveRegionID: req.body.diveRegionID,
            diveSpotTypeID: req.body.diveLocation,
            diveSpotDescription: req.body.diveSpotDescription,
            photos: fileNameWithExtension,
        })
        .catch((err) => {
            res.status(500).send({
            message: err.message || 'Some error occurred while creating the post.',
            })
          })

路线

//  create dive spot
    app.post('/api/divespot/createdivespot', upload.single("photos"), controller.createDiveSpot);

模型图式

module.exports = (sequelize, Sequelize) => {

    const diveSpot = sequelize.define("diveSpots", {

            diveSpotID: {
                type: Sequelize.INTEGER,
                primaryKey: true,
                autoIncrement: true,
                allowNull: false
            },
            diveLocation: {
                type: Sequelize.TEXT
            },
            diveRegionID: {
                type: Sequelize.INTEGER
            },
            diveSpotTypeID: {
                type: Sequelize.INTEGER
            },
            diveSpotDescription: {
                type: Sequelize.TEXT
            },
            photos: {
                type: Sequelize.TEXT,
            }},
        {
            timestamps: false
        }, {});
        diveSpot.associate = function(models){
            diveSpot.diveRegionID.belongsTo(models.diveRegion, {foreignKey: 'diveRegionID', as: 'diveRegionID'})
            diveSpot.diveSpotTypeID.belongsTo(models.diveType, {foreignKey: 'diveTypeID', as: 'diveTypeID'})
        };
    return diveSpot;
};

在此处输入图像描述

标签: node.jspostgresqlsequelize.jspostman

解决方案


推荐阅读