VSCode本身不提供Node.js运行环境,必须安装系统级Node.js并正确配置PATH;确保node -v和npm -v在VSCode终端中能正常执行,关键在于Windows安装时勾选“Add to PATH”,macOS需通过终端启动code .以继承Shell环境变量。

VSCode里装Node到底要配什么
VSCode本身不运行Node,只负责编辑和调试。真正要配的是系统级Node环境,VSCode只是调用它。装完Node后,在VSCode终端里执行 node -v 和 npm -v 能正常输出版本号,才算到位。
常见卡点:
- Windows用户装了Node但VSCode终端报
'node' is not recognized:多半是安装时没勾选“Add to PATH”,得重装或手动把Node安装目录(如C:\Program Files\nodejs\)加进系统环境变量 - macOS用Homebrew装的Node,VSCode从dock启动时PATH可能不生效:改用命令行输入
code启动VSCode,或在VSCode设置里启用terminal.integrated.env.osx补充PATH - VSCode调试时提示找不到
node_modules:检查打开的文件夹是不是项目根目录(含package.json),不是的话调试器压根不会加载node_modules/.bin下的脚本
本地起一个能被Nginx代理的Node服务
动静分离测试的前提,是有个真实响应的动态端点。不需要复杂框架,一个5行 http.createServer 就够用:
const http = require('http');
const port = 3000;
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ msg: 'dynamic from node', time: Date.now() }));
}).listen(port);
console.log(`Node server running on http://localhost:${port}`);关键点:
- 监听
localhost:3000,别绑定127.0.0.1或0.0.0.0—— Nginx反向代理时默认走localhost,地址不一致会连不上 - 响应头必须带
Content-Type,否则浏览器可能解析失败;返回JSON比HTML更易验证是否真走了后端 - 别用Express等框架的默认404中间件——它会拦截所有未定义路径,导致你后面配Nginx时发现静态路径也404,误以为配置错了
Nginx.conf里怎么写动静分离规则才不冲突
核心是两条 location 规则的优先级和路径覆盖关系。很多人配完发现所有请求都进了静态目录,或者动态请求根本没转发,问题基本出在这儿。
诊断并恢复通过 SSH 隧道连接的 OpenClaw 节点。用于解决配对必需错误、隧道冲突、远程端点错误以及 SSH 目标配置错误等问题。
推荐最小可行配置(放在 server 块内):
location /api/ {
proxy_pass http://localhost:3000/;
}
location ~* \.(js|css|png|jpg|gif|ico|svg|woff2?)$ {
root /path/to/your/static/files;
expires 1h;
}注意细节:
-
/api/必须以斜杠结尾,且proxy_pass末尾也带斜杠,否则路径拼接会错(比如请求/api/user可能变成http://localhost:3000//api/user) - 静态匹配用
~*(不区分大小写正则),别漏掉*,否则.JPG就不命中 -
root路径必须是绝对路径,VSCode里右键复制文件路径时容易漏掉开头的/,比如写成Users/xxx/project/static会找错目录 - 两个
location之间不要有空行或注释干扰——Nginx解析器对格式敏感,某些版本会把空行当作块结束
测试时怎么看请求到底走哪条路
光看页面能不能打开没用,得确认静态资源是Nginx直接吐的、动态接口是Node处理的。最直接的办法是开浏览器开发者工具的Network面板:
- 静态文件(如
main.js)响应头里要有X-Accel-Buffering: disabled或Server: nginx,且Size列显示“from memory cache”或“from disk cache” - 动态请求(如
/api/test)响应头里Server字段应为Node.js或空白,Remote Address显示127.0.0.1:3000而不是127.0.0.1:80 - 如果静态文件返回404但路径没错,检查Nginx错误日志:
tail -f /usr/local/nginx/logs/error.log(macOS)或tail -f /var/log/nginx/error.log(Linux),90%是root路径权限不对或文件不存在
真正的坑往往藏在路径拼接和权限上:Nginx worker进程用户(通常是 nobody 或 www-data)必须对静态目录有读取权限,而VSCode里用sudo启动Nginx只是临时绕过,不是长久解法。

















