我试图弄清楚我的会话有什么问题(使用 express-session),我发现它使用了 debug 模块。但是,我似乎无法启用调试消息。它说,需要通过
DEBUG
环境变量启用调试,但我似乎无法运行它。
README里的教程有这张图:
在 Windows 下,我得到“
DEBUG
不是命令行的命令”。
所以我尝试使用以下方法显式设置环境变量:
process.env.DEBUG = "*";
还是什么都没有。
我做错了什么?
正如 Traveling Tech Guy 在评论中建议的那样,在 Windows 命令提示符下,正确的语法是:
set DEBUG=* & npm start
显然,您可以将
npm start
替换为启动 Node.js 应用程序所需的任何命令。请务必使用 set
命令,不要忘记该命令与启动 Node.js 应用程序的命令之间的 &
!
如果您习惯使用 powershell,我建议您在 package.json 中进行此设置,然后您只需运行
npm start
这样就不用每次都输入所有内容了。
"scripts": {
"start": "@powershell $env:DEBUG='*,-express:router*' ; node app.js"
},
在节点应用程序中使用 npm 安装调试包
npm install debug
打开一个powershell然后
$Env:DEBUG="name_to_call"
node path_to_js_to_execute.js
在你的 pgm 里面
var debug = require('debug')('name_to_call');
首先你需要使用安装调试模块
"npm install debug --save"
你会看到下面的通道已经被添加到你的 package.json 中(所有的 npm 模块都被计入你的项目)
然后你需要添加这个以将模块导入到你想要运行调试的文件中
var debug = require('debug')('name_to_call');
现在我们只需要输入我们想写的信息,例如你好
var debug = require('debug')('name_to_call');
debug('Hello');
(尝试将上面的代码直接粘贴到文件中)
现在我们只需要使用 DEBUG 启动 Windows 服务器,为此我们将使用
npm
包 cross-env
这将使跨任何操作系统(平台不可知)设置 ENV 变量变得更容易
npm install cross-env
更改
package.json
并在scripts
部分下添加以下内容
"start-server": "cross-env DEBUG=name_to_call node server.js"
现在启动服务器只需在命令行中运行以下命令(从您的项目所在的目录)就可以了
npm run start-server
在 Babun windows shell 中,我运行,
npm
npm install debug --save
巴文
DEBUG=http node app
app.js
var app = express();
var debug = require('debug')('http');
var http = require('http').Server(app);
var server = http.listen(app.get('port'), function() {
debug('listening on port ' + server.address().port);
});
对我来说就像一个魅力。
Windows命令: 设置 DEBUG=* & 节点 ./app.js
电源外壳: $env:DEBUG='*';节点应用程序.js
终端/WSL(Ubuntu): DEBUG=* 节点 ./app.js
前面提供了各种设置环境变量的答案,我发现我的 Windows 11 机器没有任何作用。所以,我试着用谷歌搜索如何使用命令提示符在 Windows 中设置环境变量,我发现,使用下面的命令可以在 Windows 机器中设置环境变量。
setx NODE_DEBUG = 'http'
以上命令将在节点中为 http 启用调试模式,您可以在 Windows 环境变量设置中检查。 如果要为所有节点运行启用调试模式,可以使用 * 而不是 http。 要更新这个 NODE_DEBUG 值,我们需要这样写
setx NODE_DEBUG ''
但是在调试模式下也会出现安全警告,如下所示。因此,请确保不要将其保留在生产站点中。
(node:28928) Warning: Setting the NODE_DEBUG environment variable to 'http' can expose sensitive data (such as passwords, tokens and authentication headers) in the resulting log.