Node.js项目中客户端AJAX请求如何获取网站根目录路径?
解决客户端AJAX请求路径从网站根目录开始的问题
首先得明确:你遇到的require is not defined错误,核心原因是客户端JavaScript环境不支持Node.js的require和path模块——这些都是Node.js服务端特有的API,浏览器完全没有相关实现,所以直接把服务端代码搬到客户端肯定会报错。
下面给你几个简单实用的方案,轻松让AJAX请求路径基于网站根目录:
方案1:直接使用根路径前缀 /
这是最省心的方法,所有需要从根目录发起的请求,直接以/开头即可。比如:
- 假设你的服务器API接口是
/api/get-data,不管当前页面在/pages/user还是/articles/detail/123,直接写:
// 不管当前页面在哪,都会请求网站根目录下的api/get-data fetch('/api/get-data') .then(res => res.json()) .then(data => console.log(data));
浏览器会自动把这个路径解析为http://你的域名/api/get-data,完全不受当前页面位置影响。
方案2:定义全局根路径变量(适配部署在子目录的场景)
如果你的项目未来可能部署在网站的子目录下(比如http://你的域名/my-app/),可以先在页面全局定义一个根路径变量,后续所有请求都基于它:
<!-- 在页面头部的script标签里定义 --> <script> // 部署在根目录就写'/', 部署在子目录就写'/my-app/' window.APP_BASE_URL = '/'; </script>
然后在客户端JS里复用这个变量:
fetch(window.APP_BASE_URL + 'api/get-data') .then(res => res.json()) .then(data => console.log(data));
后续根目录变化时,只需要修改这个全局变量就行,不用挨个改请求路径。
补充:为什么你的原代码行不通?
var path = require(path); var myPath = path.join(__dirname, '../');
这段是标准的Node.js服务端写法:
require是Node.js的模块加载机制,浏览器没有这个函数__dirname是Node.js提供的当前文件所在目录的绝对路径,浏览器环境根本不存在这个变量
这类代码只能在Node.js服务端运行,绝对不能直接放到客户端JS里哦。
内容的提问来源于stack exchange,提问作者programmerRaj
相关产品推荐
相关产品推荐

