我正试图在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发布数据时当前发生的情况.