在开发节点api时,我在与webpack构建产品包时遇到了一个问题。在webpack配置中,如果模式被设置为“发展”,那么一切都很好。如果将模式设置为“production”,则运行节点bundle.js会给我带来错误,这说明不了多少。什么是问题,或者我应该如何调试它。
Error
at c.<anonymous> (/Users/sten/Sites/Projects/Farmi/API/New/dist/bundle.js:2:747025)
at c.<anonymous> (/Users/sten/Sites/Projects/Farmi/API/New/dist/bundle.js:2:217821)
at c._callback (/Users/sten/Sites/Projects/Farmi/API/New/dist/bundle.js:2:217609)
at c.l.end (/Users/sten/Sites/Projects/Farmi/API/New/dist/bundle.js:2:434863)
at /Users/sten/Sites/Projects/Farmi/API/New/dist/bundle.js:2:255978
at Array.forEach (<anonymous>)
at /Users/sten/Sites/Projects/Farmi/API/New/dist/bundle.js:2:255955
at processTicksAndRejections (node:internal/process/task_queues:78:11)我的webpack制作配置:
const path = require('path');
module.exports = {
mode: 'production',
target: 'node',
entry: './src/index.js',
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: 'babel-loader',
},
],
},
output: {
path: path.resolve(__dirname, 'dist/'),
filename: 'bundle.js',
},
};package.json:
{
"name": "API",
"version": "1.0.0",
"description": "API",
"main": "index.js",
"author": "API",
"license": "MIT",
"dependencies": {
"@koa/router": "^10.1.1",
"axios": "^0.27.2",
"file-extension": "^4.0.5",
"get-4byte-chars": "^0.1.0",
"koa": "^2.13.4",
"lodash": "^4.17.21",
"mime-types": "^2.1.35",
"mysql": "^2.18.1",
"pm3": "^0.0.0",
"unique-filename": "^1.1.1",
"winston": "^3.7.2"
},
"devDependencies": {
"@babel/core": "^7.17.9",
"@babel/plugin-transform-runtime": "^7.17.10",
"@babel/preset-env": "^7.16.11",
"babel-loader": "^8.2.5",
"nodemon-webpack-plugin": "^4.7.1",
"webpack": "^5.72.1",
"webpack-cli": "^4.9.2"
},
"scripts": {
"dev": "webpack --config=webpack.config.dev.js --watch",
"build": "webpack --config=webpack.config.prod.js",
"start": "node ./dist/bundle.js"
}
}发布于 2022-05-11 06:19:48
通过消除代码块发现问题。看来webpack在缩小目标时打破了Node的MySQL包。
这里有一个参考资料:
https://github.com/serverless/serverless/issues/5946
移除建议的缩小,它可以工作。
要从mysql获得错误消息,我必须将代码包装到try / catch块中,即使我拒绝错误的承诺,也应该被调用函数_dbQuery的try / catch块捕获.还是不?
原文:
const _dbQuery = async (queryString, values = null) => {
return new Promise((resolve, reject) => {
const connection = mysql.createConnection({
...configuration.mysql,
});
connection.connect((err) => {
if (err) reject(new Error(err.sqlMessage));
});
if (values !== null) {
connection.query(queryString, values, (err, res, fields) => {
if (err) reject(new Error(err.sqlMessage));
resolve(res);
connection.end();
});
} else {
connection.query(queryString, (err, res, fields) => {
if (err) reject(err.sqlMessage);
resolve(res);
connection.end();
});
}
})
};修改后给出了错误PROTOCOL_INCORRECT_PACKET_SEQUENCE:
const _dbQuery = async (queryString, values = null) => {
return new Promise((resolve, reject) => {
try {
const connection = mysql.createConnection({
...configuration.mysql,
});
connection.connect((err) => {
if (err) reject(new Error(err.sqlMessage));
});
if (values !== null) {
connection.query(queryString, values, (err, res, fields) => {
if (err) reject(new Error(err.sqlMessage));
resolve(res);
connection.end();
});
} else {
connection.query(queryString, (err, res, fields) => {
if (err) reject(new Error(err.sqlMessage));
resolve(res);
connection.end();
});
}
} catch (err) {
throw err;
}
});
};https://stackoverflow.com/questions/72189682
复制相似问题