我正试图在mssql包的帮助下,将POST个数据从我的NodeJS后端传输到SQL Server表.之前我遇到过多个错误,但在阅读、观看教程和一些帮助后,我能够将代码编写到一个没有错误的程度.

但现在的问题是,一旦我try 使用Postman发布一些数据,我会获得HTTP 201 Created成功状态,但我在表中只看到一组"NULL"值.

PS:我所有的GET条路由都很好

这是代码:

api.js:

var Db = require('./dboperations');
var Ctms = require('./ctms')
var dboperations = require('./dboperations');

var express = require('express');
var bodyParser = require('body-parser');
var cors = require('cors');
var app = express();
var router = express.Router();

app.use(bodyParser.urlencoded({ extended: true}));
app.use(bodyParser.json());
app.use(cors());
app.use('/api', router);

router.use((request,response,next)=> {
    console.log('middleware');
    next();
})

router.route('/ctms').get((request,response)=>{
    dboperations.getCtms().then(result => {
        response.json(result[0]);
    })
})

router.route('/ctms/:id').get((request,response)=>{
    dboperations.getCtmsID(request.params.id).then(result => {
        response.json(result[0]);
    })
})

router.route('/ctms/normacs/all').get((request,response)=>{
    dboperations.getallshopOrders().then(result => {
        response.json(result[0]);
    })
})

router.route('/ctms/normacs/machine/:ID').get((request,response)=>{
    dboperations.getshopOrders(request.params.ID).then(result => {
        response.json(result[0]);
    })
})

router.route('/ctms/normacs/runningSO/:machine').get((request,response)=>{
    dboperations.getrunningshopOrders(request.params.machine).then(result => {
        response.json(result[0]);
    })
})

router.route('/ctms/employees/loggedin').get((request,response)=>{
    dboperations.getloggedEmployees().then(result => {
        response.json(result[0]);
    })
})

router.route('/ctms').post((request, response) => {
    let ctms = { ...request.body }
    Db.addCtms(ctms).then(result  => {
    response.status(201).json(result);
    })
})

var port = process.env.PORT || 8090;
app.listen(port);
console.log('CTMS API is running at ' + port);

dboperations.getCtms().then(result => {
    console.log(result);
})

dboperations.getshopOrders().then(result => {
    console.log(result);
})

dboperations.getallshopOrders().then(result => {
    console.log(result);
})

dboperations.getloggedEmployees().then(result => {
    console.log(result);
})

ctms.js

class  Ctms {
    constructor(UNIQUE_ID,shop_order,item_number,item_desc,machine,supplier,feet_coil,Date_on,load_no,loadpc_signoff,pc_staff_load,unloadpc_signoff,pc_staff_unload,Date_off,ctms_id,complete){
      this.UNIQUE_ID = UNIQUE_ID;
      this.shop_order = shop_order;
      this.item_number = item_number;
      this.item_desc = item_desc;
      this.machine = machine;
      this.supplier = supplier;
      this.feet_coil = feet_coil;
      this.Date_on = Date_on;
      this.load_no = load_no;
      this.loadpc_signoff = loadpc_signoff;
      this.pc_staff_load = pc_staff_load;
      this.unloadpc_signoff = unloadpc_signoff;
      this.pc_staff_unload = pc_staff_unload;
      this.Date_off = Date_off;
      this.ctms_id = ctms_id;
      this.complete = complete;
    }
  }
  
  module.exports = Ctms;

dboperations.js:

var config = require('./dbconfig');
const sql = require('mssql');

async function getCtms(){
    try{
        let pool = await sql.connect(config);
        let ctms = await pool.request()
            .query("SELECT * FROM ctms");
        return ctms.recordsets;
    }
    catch (error){
        console.log(error);
    }
}

async function getCtmsID(ctmsID){
    try{
        let pool = await sql.connect(config);
        let ctms = await pool.request()
            .input('input_parameter', sql.Int, ctmsID)
            .query("SELECT * FROM ctms where ID = @input_parameter");
        return ctms.recordsets;
    }
    catch (error){
        console.log(error);
    }
}

async function getallshopOrders(){
    try{
        let pool = await sql.connect(config);
        let ctms = await pool.request()
            .query("SELECT distinct(sf.ord_no), sf.ID ,sf.item_no,sf.item_desc_1, sd.wc FROM REF_SFORDFIL_SQL sf INNER JOIN REF_sfdtlfil_sql sd ON sf.ord_no = sd.ord_no where (sd.wc = 'NOR1' OR sd.wc = 'NOR2' OR sd.wc = 'NOR3' OR sd.wc = 'NOR4' OR sd.wc = 'NOR5' OR sd.wc = 'NOR6' ) and ord_status = 'R' order by sd.wc asc,sf.ord_no");
        return ctms.recordsets;
    }
    catch (error){
        console.log(error);
    }
}

async function getshopOrders(normacNo){
    try{
        let pool = await sql.connect(config);
        let ctms = await pool.request()
            .input('input_parameter', sql.NChar, normacNo)
            .query("SELECT distinct(sf.ord_no), sf.ID, sf.item_no,sf.item_desc_1 FROM REF_SFORDFIL_SQL sf INNER JOIN REF_sfdtlfil_sql sd ON sf.ord_no = sd.ord_no where sd.wc = @input_parameter and ord_status = 'R' order by sf.ord_no");
        return ctms.recordsets;
    }
    catch (error){
        console.log(error);
    }
}

async function getrunningshopOrders(machine){
    try{
        let pool = await sql.connect(config);
        let ctms = await pool.request()
            .input('input_parameter', sql.NChar, machine)
            .query("SELECT * FROM ACT_CURRENT_SO where machine = @input_parameter");
        return ctms.recordsets;
    }
    catch (error){
        console.log(error);
    }
}

async function getloggedEmployees(){
    try{
        let pool = await sql.connect(config);
        let ctms = await pool.request()
            .query("SELECT * FROM ACT_LOGGED_EMP");
        return ctms.recordsets;
    }
    catch (error){
        console.log(error);
    }
}

async function addCtms(ctms) {
    try {
      let pool = await sql.connect(config);
      let insertCtms = await pool.request()
      .input('shop_order', sql.NChar(20), ctms.shop_order)
      .input('item_number', sql.NChar(20), ctms.item_number)
      .input('item_desc', sql.NChar(50), ctms.item_desc)
      .input('machine', sql.NChar(10), ctms.machine)
      .input('supplier', sql.NChar(20), ctms.supplier)
      .input('feet_coil', sql.NChar(10), ctms.feet_coil)
      .input('Date_on', sql.NChar(10), ctms.Date_on)
      .input('load_no', sql.NChar(15), ctms.load_no)
      .input('loadpc_signoff', sql.NChar(10), ctms.loadpc_signoff)
      .input('pc_staff_load', sql.NChar(10), ctms.pc_staff_load)
      .input('unloadpc_signoff', sql.NChar(10), ctms.unloadpc_signoff)
      .input('pc_staff_unload', sql.NChar(15), ctms.pc_staff_unload)
      .input('Date_off', sql.NChar(10), ctms.Date_off)
      .input('ctms_id', sql.NChar(15), ctms.ctms_id)
      .input('complete', sql.NChar(10), ctms.complete)
      .query("INSERT INTO ctms (shop_order, item_number, item_desc, machine, supplier, feet_coil, Date_on, load_no, loadpc_signoff, pc_staff_load, unloadpc_signoff, pc_staff_unload, Date_off, ctms_id, complete) values (@shop_order, @item_number, @item_desc, @machine, @supplier, @feet_coil, @Date_on, @load_no, @loadpc_signoff, @pc_staff_load, @unloadpc_signoff, @pc_staff_unload, @Date_off, @ctms_id, @complete)")
      return  insertCtms.recordsets;
    }
    catch (err) {
      console.log(err);
    }
  }

module.exports = {
    getCtms : getCtms,
    getshopOrders : getshopOrders,
    getallshopOrders : getallshopOrders,
    getCtmsID : getCtmsID,
    getrunningshopOrders : getrunningshopOrders,
    getloggedEmployees : getloggedEmployees,
    addCtms : addCtms
}

dbconfig.js:

const config = {
    user : 'XXXXX',
    password : 'XXXXX',
    server : 'XXXXX',
    database : 'XXXXX',
    options : {
        trustedConnection: true,
        encrypt: true,
        enableArithAbort: true,
        trustServerCertificate: true
    },
    port : 1433
}

module.exports = config;

这些是我在server文件夹中的JS文件.我有一个单独的client,用于ReactJS前端对SQL Server数据库执行CRUD操作.

这是对SQL Server中ctms表的查询:

CREATE TABLE [dbo].[ctms]
(
    [UNIQUE_ID] [int] IDENTITY(1,1) NOT NULL,
    [shop_order] [nchar](20) NULL,
    [item_number] [nchar](20) NULL,
    [item_desc] [nchar](50) NULL,
    [machine] [nchar](10) NULL,
    [supplier] [nchar](20) NULL,
    [feet_coil] [nchar](10) NULL,
    [Date_on] [nchar](10) NULL,
    [load_no] [nchar](15) NULL,
    [loadpc_signoff] [nchar](10) NULL,
    [pc_staff_load] [nchar](10) NULL,
    [unloadpc_signoff] [nchar](10) NULL,
    [pc_staff_unload] [nchar](15) NULL,
    [Date_off] [nchar](10) NULL,
    [ctms_id] [nchar](15) NULL,
    [complete] [nchar](10) NULL,

    CONSTRAINT [PK_ctms] 
        PRIMARY KEY CLUSTERED ([UNIQUE_ID] ASC)
                    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

最后,这是我从Postmanto the route发布数据后得到的结果http://localhost:8090/api/ctms`.

在这里的ctms表图中,前4条记录是我想要看到的结果(出于演示目的手动插入),从5到9条记录是我通过Postman发布数据时当前发生的情况.

Postman

ctms table in SQL Server database

推荐答案

所有这些问题都不在我的代码中,实际上是我试图使用数组中的对象发布数据的方式.我所做的只是删除了Postman中的数组括号,现在,数据显示在SQL Server表中.

Node.js相关问答推荐

无法在我的 node 项目中转让Google Drive v3 API中的所有权

当建议在第二代上运行云功能时,现在是否有新的Firestore AdminClient可供使用?

Node.js PNG缓冲区获取未知图像格式错误

Node.js中Redis的并发问题

为什么 Cors 在 NodeJS 中不起作用

处理嵌套元素时,使用xml2js库解析XML时发生错误

如何使用mongoose引用不在项目中的模型

我需要聚合两个 MongoDB 集合

发布请求不使用 Nodejs 更新 MongoDB 中的标头信息

NodeJS `request` 库无法通过 multipart-form-data 将文件发布到 dotnet 服务器

如何获取文件的中间值?

nyc 代码覆盖不适用于 NodeJs Express 服务器

为什么 client.on("messageCreate") 的 TextChannel 中缺少 nsfw 属性?

React Native:执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade 时发生故障

在新创建的 Angular 工作区上运行 ng lint 时出错

Discord.js V14 interaction.editReply 给出了一个无效的 webhook 令牌错误

Cypress net::ERR_EMPTY_RESPONSE 在真实服务器调用上

Chrome 浏览器未将 if-modified-since 标头发送到服务器

从目录 node Js 中检索文件

如何在 Node.js 中使用 chmod