我正在尝试使用Visual Studio Code的调试器调试我的nodejs express应用程序。调试器在技术上有效,但由于某种原因,代码在通过调试器运行时会提前停止执行。这是我的index.js
文件的代码:
'use strict';
var config = require('./config/config');
var logger = require('./lib/logger');
var errors = require('./lib/errors');
var throng = require('throng');
var Promise = require('bluebird');
var mongoose = require('mongoose').connect(config.mongo_url);
mongoose.Promise = Promise;
// mongoose.set('debug', true);
var api = require('./app/api/api');
var bodyParser = require('body-parser');
var express = require('express');
var app = express();
var options = {
workers: config.web_concurrency,
lifetime: Infinity
}
throng(options, start);
function start() {
// middleware
app.set('x-powered-by', false);
app.use(require('morgan')('dev'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
// routes
app.use('/api/' + config.api_version, api);
// errors
app.use(errors);
// Server setup
var server = app.listen(config.port, function() {
console.log('server server server');
logger.silly('pid: ' + process.pid + ' listening on port:' + config.port);
});
// Shutdown
var gracefulShutdown = function() {
logger.silly('Received SIGTERM signal, shutting down express server');
server.close();
}
process.on('SIGTERM', gracefulShutdown);
server.on('close', function() {
logger.silly('Express server closed.. about to cleanup connections');
mongoose.disconnect();
});
}
这是一个非常基本且典型的index.js
文件,我已经在很多不同的项目中成功使用了很长一段时间。当我通过终端运行node index.js
,nodemon index.js
或npm start
时,一切正常。应用程序运行,我可以成功地向应用程序发送API请求。
但是,当我使用Visual Studio Code的调试器运行它时,它会在以下代码行停止:
throng(options, start);
我可以在此之前设置断点,它们会命中,我也可以在VSCode的终端窗口中查看此行之前的日志语句。但是,在throng(options, start)
运行后,没有任何反应。我也无法向应用发送http请求。 VSCode的调试控制台只给我一个你期望的典型输出:
node --debug-brk=11591 --nolazy index.js
Debugger listening on port 11591
Debugger listening on port 11592
throng
模块是一种在nodejs应用中分叉子进程的简便方法:https://github.com/hunterloftis/throng
无论我做什么,当我通过终端运行它时一切正常,但是当使用VSCode的调试器时它就无法工作。
这是我的launch.json
文件,由VSCode生成:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceRoot}/index.js",
"cwd": "${workspaceRoot}",
"env": {
"NODE_ENV": "development"
}
},
{
"type": "node",
"request": "attach",
"name": "Attach to Process",
"port": 3000
}
]
}