首页 > 解决方案 > TypeError:无法读取未定义的 Nodejs MSSQL 存储过程的属性“类型”

问题描述

我有一个这样的存储过程:

CREATE PROCEDURE [dbo].[st_addStudent] 
    @StudentID int, 
    @StudentName varchar(50), 
    @TimeStamp datetime, 
    @Notes varchar(MAX) 
AS 
BEGIN 
    INSERT INTO Students (StudentID , StudentName , [TimeStamp], Notes) 
    VALUES (@StudentID , @StudentName , @TimeStamp, @Notes); 
END

我正在尝试通过执行以下操作来运行存储过程:

rows = await pool
        let db = await rows
        let request = db.request()
        request.input('StudentID ',request.Int,12)
        request.input('StudentName ',request.VarChar(50),34)
        request.input('TimeStamp',request.DateTime,new Date())
        request.input('Notes',request.VarChar,'TEST')

        request.execute('st_addStudent')

我收到一条错误消息:

request.input('StudentID ',request.Int,12)

TypeError:无法读取未定义的属性“类型”

编辑1:

数据库模块设置:

const sql = require('mssql/msnodesqlv8');
const util = require("util")


//Need this package for windows authentication
require('msnodesqlv8');





const config = {
        user: 'UserName',
        password: 'Password',
        server: 'Sever23', // You can use 'localhost\\instance' to connect to named instance
        database: 'Student_DEV',
        // driver:'msnodesqlv8',
        pool: {
            max: 10,
            min: 5,
            idleTimeoutMillis: 30000
        },
        options:{
            encrypt:false,
            instanceName:'STUDENT'
        },
        //  port:57909,
        enableArithAbort:false  
}

let connection = new sql.ConnectionPool(config).connect()
  .then(query => { return query } )
  .catch(e => console.error("Database Trouble!  ", e))



module.exports = connection;

在我的路线中,我有

const express = require("express");
const router = express.Router();
const pool = require('../middleware/database')

router.post("/alterStudent",async (req,res)=>{
   try{
        rows = await pool
        let db = await rows
        let request = db.request()
        request.input('StudentID ',request.Int,12)
        request.input('StudentName ',request.VarChar(50),34)
        request.input('TimeStamp',request.DateTime,new Date())
        request.input('Notes',request.VarChar,'TEST')

        request.execute('st_addStudent')


   }
   catch(err){
     console.log(err)
  }

})

标签: node.jsnode-mssql

解决方案


要解决这个问题,我需要mssql在我的路线中加载 lib

const sql = require('mssql')

并将我的查询更改为:

let db = await pool
 let request = db.request()
             .input('UserID',sql.VarChar(50),34)
             .input('TimeStamp',sql.DateTime,new Date())

推荐阅读