Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJs POST请求ER\u数据\u过长_Node.js_Post_Request - Fatal编程技术网

Node.js NodeJs POST请求ER\u数据\u过长

Node.js NodeJs POST请求ER\u数据\u过长,node.js,post,request,Node.js,Post,Request,我正在尝试向网站添加帖子请求,但我不理解收到的错误。我发送了四个文本元素,我确信它们是正确的(大小、类型),并且我在数据库中手动添加了一个元素,没有问题。这不是我的网站,我真的不知道它是如何工作的,所以我复制了另一个请求。但是错误是我的一个元素太长了,事实并非如此,所以我有点困惑 这是我的发帖要求 app.post("/api/addOS" , function(req, res) { if(!(apikeys[req.query.username]===req.query.apikey

我正在尝试向网站添加帖子请求,但我不理解收到的错误。我发送了四个文本元素,我确信它们是正确的(大小、类型),并且我在数据库中手动添加了一个元素,没有问题。这不是我的网站,我真的不知道它是如何工作的,所以我复制了另一个请求。但是错误是我的一个元素太长了,事实并非如此,所以我有点困惑

这是我的发帖要求

app.post("/api/addOS" , function(req, res) {
    if(!(apikeys[req.query.username]===req.query.apikey) || (req.query.username == undefined) || (req.query.apikey == undefined)) {
        res.json({"error" : "not allowed"});
    } else {
        var con = new Database();
        var query = "INSERT INTO BRAND (name,abbr,color,type) VALUES ('"+req.body.name+"','"+req.body.abbr+"','"+req.body.couleur+"','"+req.body.type+"')";
        con.query(query).then(rows => {          
            res.json(rows);
        });
    }
});
类数据库的定义如下

class Database {
constructor(  ) {
    this.connection = mysql.createConnection( {
      host: "localhost",
      user: "root",
      password: "pswd",
      database: "dbname"
  } );
}
query( sql, args ) {
    return new Promise( ( resolve, reject ) => {
        this.connection.query( sql, args, ( err, rows ) => {
            if ( err ){
                return reject( err );
            }
            resolve( rows );
        } );
    } );
}
close() {
    return new Promise( ( resolve, reject ) => {
        this.connection.end( err => {
            if ( err )
                return reject( err );
            resolve();
        } );
    } );
}
}

我的网页控制台上显示的错误是这个

angular.js:14525可能未经处理的拒绝:{“数据”:null,“状态”:-1,“配置”:{“方法”:“POST”,“transformRequest”:[null],“transformResponse”:[null],“jsonpCallbackParam”:“回调”,“url”:“>3Jocv”,“头”:{“接受”:“应用程序/json,文本/plain,/”,“名称”:“测试”,“缩写”,“测试”,“类型”:“os”,“couleur”:“tre”},“状态文本”:

我控制台上的就是这个

(节点:15728)未处理的PromisejectionWarning:错误:ER_DATA_过长:第1行“abbr”列的数据过长 在Query.Sequence.\u packetToError(C:\wamp64\www\node\node\u modules\mysql\lib\protocol\sequences\Sequence.js:47:14) 在Query.ErrorPacket(C:\wamp64\www\node\node\u modules\mysql\lib\protocol\sequences\Query.js:77:18) at Protocol.\u parsePacket(C:\wamp64\www\node\node\u modules\mysql\lib\Protocol\Protocol.js:291:23) 在Parser.\u parsePacket(C:\wamp64\www\node\node\u modules\mysql\lib\protocol\Parser.js:433:10) 在Parser.write(C:\wamp64\www\node\node\u modules\mysql\lib\protocol\Parser.js:43:10) 在Protocol.write(C:\wamp64\www\node\node\u modules\mysql\lib\Protocol\Protocol.js:38:16) 在插座上。(C:\wamp64\www\node\node\u modules\mysql\lib\Connection.js:91:28) 在插座上。(C:\wamp64\www\node\node\u modules\mysql\lib\Connection.js:525:10) 在Socket.emit(events.js:223:5) 在addChunk(_stream_readable.js:309:12) -------------------- at协议。\排队(C:\wamp64\www\node\node\u modules\mysql\lib\Protocol\Protocol.js:144:48) 在Connection.query(C:\wamp64\www\node\node\u modules\mysql\lib\Connection.js:201:25) 在C:\wamp64\www\node\app.js:92:29 在新的承诺() 在Database.query(C:\wamp64\www\node\app.js:91:16) 在C:\wamp64\www\node\app.js:379:9 在Layer.handle[作为handle\u请求](C:\wamp64\www\node\node\u modules\express\lib\router\Layer.js:95:5) 下一步(C:\wamp64\www\node\node\u modules\express\lib\router\route.js:137:13) 在Route.dispatch(C:\wamp64\www\node\node\u modules\express\lib\router\Route.js:112:3) 在Layer.handle[作为handle\u请求](C:\wamp64\www\node\node\u modules\express\lib\router\Layer.js:95:5) (节点:15728)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:1) (节点:15728)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程


我看到了共同层面的问题:

1) 永远不要在请求时创建到数据库的连接

2) 您的数据库类允许使用带有args替换的承诺(
符号,在我的示例中),所以使用它,它更安全

您说过
abbr
字段是
varchar(8)
so
req.body.abbr.trim()
在我的示例中,必须清除可能是问题所在的空符号

请尝试此代码并告诉我结果

const db = new Database(); // Connection must be created once

// authorization
const isAuthorized = function(req, res, next) {
  if(
   req.query.username && 
   req.query.apikey && 
   apikeys[req.query.username] === req.query.apikey
  ) {
    return next();
  }

  res.status(401).json({"error" : "not authorized"});
};

app.post(
  "/api/addOS", 
  isAuthorized,
  async function(req, res) {
    try {
      const result = await db.query(
        'INSERT INTO BRAND (name, abbr, color, type) VALUES (?, ?, ?, ?)',
        [req.body.name, req.body.abbr.trim(), req.body.color, req.body.type]
      );
      res.status(201).json(result);
    }
    catch (error) {
      res.status(500).json({message: error.message});
    }
  });

什么类型的
abbr
字段及其长度是多少符号?或者发送的数据长度不要超过2或3个符号(因为
test
的长度为4个字符,而
abbr
field的长度为4个字符)@num8er abbr的类型为varchar(8)。我也尝试过使用较少的图表,但现在似乎可以工作了。我真的很讨厌5年后不得不收回别人的密码。问题总是很奇怪。