[英]How to resolve paths in Node
我有一個正在運行的節點服務器,我試圖弄清楚如何在服務器上傳遞文件路徑(以及如何響應對這些資源的請求),以便使我基本上擁有一個靜態文件服務器,但是我卻擁有一個靜態文件服務器。可以根據請求參數( POST
或GET
等)進行控制。 現在,我的文件結構設置如下( dir_
表示目錄):
Main Folder:
server.js
dir_content:
home.html
style.css
dir_uploads:
dir_finished:
file1.txt
file2.txt
為了響應我的請求,我的代碼如下所示:
http.createServer(function(request, response) {
if(request.method.toLowerCase() == 'get') {
var filePath = './dir_content' + request.url;
if (filePath == './dir_content/') {
filePath = './dir_content/home.html';
}
fs.exists(filePath, function (exists) {
if (exists) {
fs.readFile(filePath, function (error, content) {
if (error) {
response.writeHead(500);
response.end();
}
else {
response.writeHead(200, {'Content-Type': contentType});
response.end(content, 'utf-8');
}
})
這樣,我就可以使用正確的頁面(如果存在)來響應對Web頁面的任何GET
請求,但是最終它會扭曲服務器上資源的路徑。
示例:嘗試檢索file1.txt的用戶將導航到localhost:8080/dir_content/dir_uploads/dir_finished/file1.txt
但是我的代碼會將額外的./dir_content
添加到他們的請求中,使他們看起來像在嘗試訪問:
localhost:8080/dir_content/dir_content/dir_uploads/dir_finished/file1.txt
有沒有一種簡單的方法可以為文件夾中的資源提供准確的絕對路徑而無需外部節點模塊(通過某種方式設置某種基本目錄)?
乍一看,您似乎並沒有考慮request.url可能包含dir_content前綴。 如果確實如此,那么我建議您使用一個簡單的正則表達式測試來查看它是否存在:
if (!/^[\/]?dir_content\//i.test(request.url))
filePath = '/dir_content' + request.url;
filePath = '.' + filePath;
簡單的小提琴來演示正則表達式:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.