首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Node-MSSQL编写的语句

用Node-MSSQL编写的语句
EN

Stack Overflow用户
提问于 2020-03-26 20:56:02
回答 1查看 2.4K关注 0票数 1

我想用Node.js将API数据存储在Server数据库中。正如您在下面的第一段代码中所看到的,它已经用于正常的INSERT查询。

代码语言:javascript
复制
   server.route({

        method: 'POST',
        path: '/',
        handler: async(request, h) => {

            try {
                await pool.query("INSERT INTO mytable(device,data,stationId,rssi,unix_timestamp)                              VALUES('"+request.payload.device+"','"+request.payload.data+"','"+request.payload.station+"',
'"+request.payload.rssi+"','"+request.payload.time+"')");

                return h.response('Callback received').code(200);
            }
            catch (err) {
                console.log("SQL Err", err.stack);
                return 'Error';
            }

        }

    });

现在,我的I希望对代码进行一点改进,以避免SQL注入,并有一个更好的概述。

因此,我想使用准备好的语句,如本文档中所描述的:https://www.npmjs.com/package/mssql#prepared-statement

到目前为止,我已经在这里成功地做到了:

代码语言:javascript
复制
server.route({
    method: 'POST',
    path: '/',
    handler: async(request, h) => {


        const ps = new sql.PreparedStatement(pool)

        try {

        ps.input('device', sql.VarChar(10))
        ps.input('data', sql.VarChar(24))
        ps.input('station', sql.NChar(10))
        ps.input('rssi', sql.Float)
        ps.input('time', sql.Int)

            await ps.prepare('INSERT INTO mytable(device,data,stationId,rssi,unix_timestamp) VALUES(@device,@data,@station,@rssi,@time)');

            try {
              await ps.execute(
                { device: request.payload.device },
                { data: request.payload.data },
                { station: request.payload.station },
                { rssi: request.payload.rssi },
                { time: request.payload.time }
                )
            } finally {
              await ps.unprepare();
            }
            return h.response('Callback received').code(200);
        }
         catch (err) {
            console.log("SQL Err", err.stack);
            return 'Error';
        }
    }
});

发生以下错误:

代码语言:javascript
复制
at Parser.emit (events.js:223:5)
at Parser.<anonymous> (C:\Users\AW\sqltest\node_modules\tedious\lib\token\token-stream-parser.js:37:14)
at Parser.emit (events.js:223:5)
at addChunk (C:\Users\AW\sqltest\node_modules\readable-stream\lib\_stream_readable.js:297:12)
at readableAddChunk (C:\Users\AW\sqltest\node_modules\readable-stream\lib\_stream_readable.js:279:11)
at Parser.Readable.push (C:\Users\AW\sqltest\node_modules\readable-stream\lib\_stream_readable.js:240:10)
at Parser.Transform.push (C:\Users\AW\sqltest\node_modules\readable-stream\lib\_stream_transform.js:139:32)

这是我从API获得的JSON数据的一个示例:

代码语言:javascript
复制
{
  "device":"887B53",
  "data":"4660000000000062b4a8",
  "station":"1B2C" 
  "rssi":"-123",
  "time":"1585258718"
}

我希望有人能帮我解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2020-03-26 21:04:31

该错误似乎发生在以下一行:

ps.input(“站”,sql.NChar(10))

我将调试在这里分配的值,看看它是否符合模式,或者它是否未定义。

另外,如果您担心可读性和SQL注入,请考虑使用ORM,例如后缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60876000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档