所以我试图在亚马逊上运行lambda并最终通过测试amazons测试控制台中的lambda来缩小错误.
我得到的错误就是这个.
{
"errorMessage": "Please install mysql2 package manually",
"errorType": "Error",
"stackTrace": [
"new MysqlDialect (/var/task/node_modules/sequelize/lib/dialects/mysql/index.js:14:30)",
"new Sequelize (/var/task/node_modules/sequelize/lib/sequelize.js:234:20)",
"Object.exports.getSequelizeConnection (/var/task/src/twilio/twilio.js:858:20)",
"Object.<anonymous> (/var/task/src/twilio/twilio.js:679:25)",
"__webpack_require__ (/var/task/src/twilio/twilio.js:20:30)",
"/var/task/src/twilio/twilio.js:63:18",
"Object.<anonymous> (/var/task/src/twilio/twilio.js:66:10)",
"Module._compile (module.js:570:32)",
"Object.Module._extensions..js (module.js:579:10)",
"Module.load (module.js:487:32)",
"tryModuleLoad (module.js:446:12)",
"Function.Module._load (module.js:438:3)",
"Module.require (module.js:497:17)",
"require (internal/module.js:20:19)"
]
}
Run Code Online (Sandbox Code Playgroud)
很容易,所以我必须安装mysql2.所以我把它添加到我的package.json文件中.
{
"name": "test-api",
"version": "1.0.0",
"description": "",
"main": "handler.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 0"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"aws-sdk": "^2.153.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2", …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-rds aws-lambda serverless-framework node-mysql2
我有与此类似的代码 - 非常简单只是为了展示案例。
this.getCode = (code: string): Promise<codeObject | false> => {
return new Promise((resolve, reject) => {
pool.query('SELECT * FROM ?? WHERE code = ?', [TABLE, code], function (err, result) {
if (err) {
return reject(err);
}
if (result.length === 0) {
return resolve(false);
}
});
});
};
Run Code Online (Sandbox Code Playgroud)
问题出在if (result.length === 0) {行,错误是error TS2339: Property 'length' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[]'.
我找不到任何方法来重新定义 OkPacket,至少足以length?: number
忽略该错误(大多数选择无论如何都不会得到 OkPackets,并且当我知道时我得到的不是 OkPacket,我不想检查每个选择的类型它不是)...
我正在努力弄清楚处理嵌套等待/异步例程中的错误的正确模式是什么,同时又保持代码干净简单。(尽管阅读了无数文章和博客)
我有一组(基本上)类似于以下的函数:
async validate(params) {
const recCount = await this._getCount(db, params);
if( recCount > 0 )
return "Record already exists";
}
Run Code Online (Sandbox Code Playgroud)
_getCount 是创建 sql 的包装器
async _getCount(conn, regdata) {
const sql = "SELECT count(*) AS 'count' FROM myTable WHERE product = ? and category = ?";
let rows = await this._execSQL(conn, sql, [ regdata.product, regdata.category ]);
return rows[0].count;
}
Run Code Online (Sandbox Code Playgroud)
实际查询执行如下:
async _execSQL(conn, sql, data) {
const [ rows ] = await conn.query(sql, data);
return rows;
}
Run Code Online (Sandbox Code Playgroud)
如果查询失败,方法conn.query(来自mysql2/promise …
我正在使用 nodejs + mysql2 的项目中工作,有时我收到错误Too muchconnections。
我的连接:
import {createPool, Pool} from 'mysql2/promise';
export async function connect(): Promise < any > {
const connection: Pool = await createPool({
host: 'localhost',
port: 3306,
user: 'root',
password: '',
database: 'mendozarq',
connectionLimit: 10
});
return connection;
}
Run Code Online (Sandbox Code Playgroud)
控制器:
import { Response, Request } from 'express';
import { FieldPacket, Pool } from 'mysql2/promise';
import { connect } from './../../classes/database';
import { Personal } from './../../models/personal.interface';
export const getAllPersonal = async (req: Request, res: …Run Code Online (Sandbox Code Playgroud) 我有一个我想bulk insert进入mysql的方法。我正在使用NodeJS和mysql2。
我的方法:
\ncreateWorklog = async ({ sqlArray }) => {\n const sql = `INSERT INTO ${this.tableName}\n (project_id, user_id, date, duration, task, description) VALUES ?`\n\n const result = await query(sql, [sqlArray])\n const affectedRows = result ? result.affectedRows : 0;\n\n return affectedRows;\n}\nRun Code Online (Sandbox Code Playgroud)\n其中sqlArray是 an array of arrays,其中所有子数组的长度都相同。
query该方法中调用的方法是下一个:
query = async (sql, values) => {\n return new Promise((resolve, reject) => {\n const callback = (error, result) …Run Code Online (Sandbox Code Playgroud) 谢谢你的时间。我在使用 mysql2/promise 包创建事务查询时遇到问题。
这是查询:
await db.execute(`START TRANSACTION`);
await db.execute(`INSERT INTO user VALUES (?, ?, ?, ?, ?, ?)`, [...userDetails]);
await db.execute(`INSERT INTO account VALUES (?, ?, ?, ?, ?, ?)`, [...accountDetails]);
await db.execute(`COMMIT`);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Error: This command is not supported in the prepared statement protocol yet
code: 'ER_UNSUPPORTED_PS',
errno: 1295,
sql: 'START TRANSACTION',
sqlState: 'HY000',
sqlMessage: 'This command is not supported in the prepared statement protocol yet'
Run Code Online (Sandbox Code Playgroud)
我想知道是否与我的查询有关?我相信 INSERT 语句在事务块中应该完全没问题。我还尝试将每个查询组合成一个字符串,但这似乎也不起作用。
mysql2的准备语句文档显示了位置参数。虽然有一些关于命名参数的讨论,但据我所知,它们没有记录在案。如果支持,如何使用命名参数?
例如,以下内容如何转换为使用命名参数?
const config = require('config'); // for DB connection info
const mysql = require('mysql2/promise');
const connection = await mysql.createConnection({
...config.get('db.conn'),
// (or however connection information is retrieved locally)
})
let sql = "SELECT ? AS a, ? AS b, ? + ? AS ab",
values = [2, 3, 2, 3];
// note values[2:3] must equal values[0:1], otherwise results will be incorrect
let [result, columns] = await connection.execute(sql, values);
Run Code Online (Sandbox Code Playgroud)
(请注意,数据库连接信息被排除在示例之外,并通过使用配置包来表示。在本地运行之前,必须通过以任何首选方式提供连接信息来完成示例。)
我在使用node-mysql2测试项目时遇到问题,做出反应,排序和开玩笑。仅在测试过程中会出现此问题。
Encoding not recognized: 'cesu8' (searched as: 'cesu8')
at Object.getCodec (project/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:106:23)
at Object.getDecoder (project/node_modules/mysql2/node_modules/iconv-lite/lib/index.js:122:23)
at Object.<anonymous>.exports.decode (project/node_modules/mysql2/lib/parsers/string.js:9:23)
at Packet.Object.<anonymous>.Packet.readNullTerminatedString (project/node_modules/mysql2/lib/packets/packet.js:373:23)
at Function.Object.<anonymous>.Handshake.fromPacket (project/node_modules/mysql2/lib/packets/handshake.js:18:31)
at ClientHandshake.Object.<anonymous>.ClientHandshake.handshakeInit (project/node_modules/mysql2/lib/commands/client_handshake.js:98:38)
at ClientHandshake.Object.<anonymous>.Command.execute (project/node_modules/mysql2/lib/commands/command.js:40:20)
at Connection.Object.<anonymous>.Connection.handlePacket (project/node_modules/mysql2/lib/connection.js:515:28)
at PacketParser.onPacket (project/node_modules/mysql2/lib/connection.js:94:16)
at PacketParser.executeStart (project/node_modules/mysql2/lib/packet_parser.js:77:14)
at Socket.<anonymous> (project/node_modules/mysql2/lib/connection.js:102:29)
Run Code Online (Sandbox Code Playgroud) 我有这个帖子请求
app.post("/msg", (req, res) => {
console.log(req.body)
connection.query('INSERT INTO plans (topic, notes, resources) VALUES
(?)', [req.body.topic, req.body.note, req.body.resource],(error,
results) => {
if (error) return res.json({ error: error });
});
});
Run Code Online (Sandbox Code Playgroud)
我从中得到这个错误
"error": {
"code": "ER_WRONG_VALUE_COUNT_ON_ROW",
"errno": 1136,
"sqlState": "21S01",
"sqlMessage": "Column count doesn't match value count at row 1"
}
Run Code Online (Sandbox Code Playgroud)
这是桌子
CREATE TABLE plans(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
topic VARCHAR(64) NOT NULL,
notes VARCHAR(200) NOT NULL,
resources VARCHAR(200) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
请问这个请求有什么问题吗?
我正在尝试使用mysql2连接到RDS MySQL实例.当我在本地使用包时,一切正常.但是,当我在AWS Lambda函数中使用它时,我得到了这个神秘的错误:
TypeError: f.ClientHandshake is not a constructor
at new g (/var/task/index.js:275:62824)
at new o (/var/task/index.js:275:224046)
at e.exports.getConnection (/var/task/index.js:275:218705)
at e.exports.execute (/var/task/index.js:275:220197)
at /var/task/index.js:275:372341
at new Promise (<anonymous>)
at c.execute (/var/task/index.js:275:372308)
at /var/task/index.js:357:14189
at E (/var/task/index.js:316:24416)
at Generator._invoke (/var/task/index.js:316:24204)
Run Code Online (Sandbox Code Playgroud)
知道问题是什么吗?我确信角色/安全组都已正确配置.
node-mysql2 ×10
node.js ×8
mysql ×3
mysql2 ×3
amazon-rds ×2
aws-lambda ×2
javascript ×2
typescript ×2
async-await ×1
bulkinsert ×1
jestjs ×1