Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 babel源代码映射-无法正确调试_Node.js_Async Await_Babeljs_Source Maps_Babel Polyfill - Fatal编程技术网

Node.js babel源代码映射-无法正确调试

Node.js babel源代码映射-无法正确调试,node.js,async-await,babeljs,source-maps,babel-polyfill,Node.js,Async Await,Babeljs,Source Maps,Babel Polyfill,我正在一个大学项目中工作,正在编写后端,其中包含使用babel传输的节点js,以便使用async/await 我生成源代码映射是为了正确调试,但它做了一些相当糟糕的工作 例如,我不能在“if”或“return”语句上设置断点 我担心这只是在安装了一些额外的巴贝尔插件之后才发生的,我在试图解决一些错误时不得不安装这些插件 这是我的package.json: "axios": "^0.15.3", "babel-runtime": "^6.20.0", "body-parser": "^1.15.2

我正在一个大学项目中工作,正在编写后端,其中包含使用babel传输的节点js,以便使用async/await

我生成源代码映射是为了正确调试,但它做了一些相当糟糕的工作

例如,我不能在“if”或“return”语句上设置断点 我担心这只是在安装了一些额外的巴贝尔插件之后才发生的,我在试图解决一些错误时不得不安装这些插件

这是我的package.json:

"axios": "^0.15.3",
"babel-runtime": "^6.20.0",
"body-parser": "^1.15.2",
"chai": "^3.5.0",
"chai-datetime": "^1.4.1",
"ejs": "^2.5.2",
"exceljs": "^0.2.39",
"express": "^4.14.0",
"flat": "^2.0.1",
"generator": "^1.0.1",
"hash": "^0.2.0",
"hash-generator": "^0.1.0",
"mocha": "^3.2.0",
"moment": "^2.17.1",
"mongoose": "^4.7.2",
"nodemailer": "^2.7.0",
"react": "^15.4.1",
"react-bootstrap": "^0.30.7",
"react-bootstrap-table": "^2.9.0",
"react-dom": "^15.4.1",
"react-router": "^3.0.0",
"react-uniform": "^1.2.1",
"rimraf": "^2.5.4",
"underscore": "^1.8.3",
"winston": "^2.3.0",
"winston-mongodb": "^1.6.5"


"devDependencies": {
"babel-cli": "^6.18.0",
"babel-core": "^6.21.0",
"babel-loader": "^6.2.10",
"babel-plugin-transform-runtime": "^6.15.0",
"babel-polyfill": "^6.20.0",
"babel-preset-es2015": "^6.18.0",
"babel-preset-es2016": "^6.16.0",
"babel-preset-latest": "^6.16.0",
"babel-preset-react": "^6.16.0",
"babel-preset-stage-0": "^6.16.0",
"babel-watch": "^2.0.4",
"html-webpack-plugin": "^2.24.1",
"webpack": "^1.13.3",
"webpack-dev-server": "^1.16.2"
这有点切题,但你明白了

奇怪的是,传输的js文件看起来很奇怪

var addEncouragement = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(sessionId, encouragementDetails) {
    var user, encouragement, i, exist, products, res;
    return _regenerator2.default.wrap(function _callee$(_context) {
        while (1) {
            switch (_context.prev = _context.next) {
                case 0:
                    logger.info('Services.Encouragement.index.addEncouragement', { 'session-id': sessionId });
                    _context.next = 3;
                    return permissions.validatePermissionForSessionId(sessionId, 'addEncouragement');

                case 3:
                    user = _context.sent;

                    if (!(user != null)) {
                        _context.next = 29;
                        break;
                    }

                    encouragement = new encouragementModel();

                    encouragement.active = encouragementDetails.active;
                    encouragement.numOfProducts = encouragementDetails.numOfProducts;
                    encouragement.rate = encouragementDetails.rate;

                    //check if all the products id belongs to products
                    i = 0;

                case 10:
                    if (!(i < encouragementDetails.products.length)) {
                        _context.next = 19;
                        break;
                    }

                    _context.next = 13;
                    return dal.getProductById(encouragementDetails.products[i]);

                case 13:
                    exist = _context.sent;

                    if (!(exist == null)) {
                        _context.next = 16;
                        break;
                    }

                    return _context.abrupt('return', { 'encouragement': null, 'code': 404, 'err': 'product not found' });

                case 16:
                    i++;
                    _context.next = 10;
                    break;

                case 19:
                    _context.next = 21;
                    return dal.getProductsById(encouragementDetails);

                case 21:
                    products = _context.sent;

                    encouragement.products = products;

                    _context.next = 25;
                    return dal.addEncouragement(encouragement);

                case 25:
                    res = _context.sent;
                    return _context.abrupt('return', { 'encouragement': encouragement, 'code': 200, 'err': null });

                case 29:
                    return _context.abrupt('return', { 'encouragement': null, 'code': 401, 'err': 'permission denied' });

                case 30:
                case 'end':
                    return _context.stop();
            }
        }
    }, _callee, this);
}));
如果有人能告诉我这里出了什么问题,为什么我不能正确调试,我会非常感激


谢谢

不确定是否可以使用源代码映射100%地进行调试。我也有类似的问题,但从来不会引起真正的麻烦。我不知道会出什么问题。在我的例子中,我可以调试我的所有代码,但有时它有棘手的调试。例如,它将if-else包装到函数中(或者可能在两个函数中),并在
else
之后阻止它返回到
if
语句的行。但事实上,它从来不会制造麻烦。有一个想法——搜索一些调试行为不好的地方,然后去源代码处将其重写为简单的javascript(没有
let
const
,等等),首先,你在使用什么调试器?我在WebStorm中编写我的项目,所以我使用它的调试器
let addEncouragement = async function(sessionId, encouragementDetails) {
logger.info('Services.Encouragement.index.addEncouragement', {'session-id': sessionId});
let user = await permissions.validatePermissionForSessionId(sessionId, 'addEncouragement');
//check if to user have the permissions
if(user != null) {
    let encouragement = new encouragementModel();
    encouragement.active = encouragementDetails.active;
    encouragement.numOfProducts = encouragementDetails.numOfProducts;
    encouragement.rate = encouragementDetails.rate;

    //check if all the products id belongs to products
    for (let i = 0; i < encouragementDetails.products.length; i++) {
       let exist = await dal.getProductById(encouragementDetails.products[i]);
       if(exist == null){
           return {'encouragement': null, 'code': 404, 'err': 'product not found'};
       }
    }

    //create id object from the string id
    let products = await dal.getProductsById(encouragementDetails);
    encouragement.products = products;

    let res = await dal.addEncouragement(encouragement);
    return {'encouragement': encouragement, 'code': 200, 'err': null};
}
else{
    return {'encouragement': null, 'code': 401, 'err': 'permission denied'};
}
"use strict";
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }