เป็นไปได้ไหม? ฉันต้องการตั้งค่าไดเรกทอรีที่แตกต่างกันสองรายการเพื่อให้บริการไฟล์แบบคงที่ สมมติว่า / public และ / mnt
เป็นไปได้ไหม? ฉันต้องการตั้งค่าไดเรกทอรีที่แตกต่างกันสองรายการเพื่อให้บริการไฟล์แบบคงที่ สมมติว่า / public และ / mnt
คำตอบ:
คุณยังสามารถกำหนดเส้นทางที่จะให้บริการไฟล์แบบคงที่ไปยังเว็บได้โดยระบุพารามิเตอร์เพิ่มเติม (แรก) ที่use()
ต้องการดังนี้:
app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));
ด้วยวิธีนี้คุณจะได้รับสองไดเรกทอรีที่แตกต่างกันบนเว็บที่สะท้อนไดเรกทอรีท้องถิ่นของคุณไม่ใช่เส้นทาง URL เดียวที่ล้มเหลวระหว่างสองไดเรกทอรีภายในเครื่อง
กล่าวอีกนัยหนึ่งคือรูปแบบ URL:
http://your.server.com/public/*
ให้บริการไฟล์จากไดเร็กทอรีโลคัลpublic
ในขณะที่:
http://your.server.com/public2/*
public2
ให้บริการไฟล์จากไดเรกทอรีท้องถิ่น
BTW สิ่งนี้มีประโยชน์เช่นกันหากคุณไม่ต้องการให้คงที่เพื่อให้บริการไฟล์จากรากของเซิร์ฟเวอร์ของคุณ แต่มาจากเส้นทางที่ตรงกว่า
HTH
"homepage": "/public"
และ"homepage": "/public2"
ลงใน package.json ของแอพ react ที่เกี่ยวข้อง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้แอป react สองแอปดูคำตอบของฉันที่นี่stackoverflow.com/a/48569896/4746648
shared
โฟลเดอร์เพื่อให้คุณสามารถใช้"./"
และ"./shared"
และบูมคุณสามารถแบ่งปันไฟล์ js ได้อย่างง่ายดาย: 3 ขอบคุณ
คุณยังสามารถ "รวม" ไดเรกทอรีเป็นไดเรกทอรีเดียวที่มองเห็นได้
โครงสร้างไดเรกทอรี
/static
/alternate_static
รหัส
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
ทั้ง static และ alternate_static จะถูกทำหน้าที่ราวกับว่าอยู่ในไดเร็กทอรีเดียวกัน ระวังชื่อไฟล์ clobbers ด้วย
main.js
ในมันจะไม่ยังคงมองในstatic/
alternate_static/
alternate_static
จะถูกเสิร์ฟ
ไม่สามารถทำได้โดยการแทรกมิดเดิลแวร์เดียว แต่คุณสามารถฉีดstatic
มิดเดิลแวร์ได้หลายครั้ง:
app.configure('development', function(){
app.use(express.static(__dirname + '/public1'));
app.use(express.static(__dirname + '/public2'));
});
คำอธิบาย
ดูที่connect / lib / middleware / static.js # 143 :
path = normalize(join(root, path));
มีoptions.root
รากแบบคงที่ซึ่งคุณกำหนดexpress.static
หรือconnect.static
เรียกใช้และpath
เป็นเส้นทางการร้องขอ
ดูเพิ่มเติมที่connect / lib / middleware / static.js # 154 :
fs.stat(path, function(err, stat){
// ignore ENOENT
if (err) {
if (fn) return fn(err);
return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
? next()
: next(err);
เส้นทางตรวจสอบเพียงครั้งเดียวและหากไม่พบไฟล์คำขอส่งผ่านไปยังมิดเดิลแวร์ถัดไป
อัปเดตสำหรับ Connect 2.x
ลิงก์ไปยังโค้ดไม่สามารถใช้งานได้สำหรับ Connect 2.x แต่การใช้งานมิดเดิลแวร์แบบคงที่หลายรายการยังคงเป็นไปได้เช่นเดิม
const express = require('express');
const path = require('path');
const pagesPath = path.join(__dirname, '/cheatsheet');
const cssPath = path.join(__dirname, '/stylesheet');
const port = process.env.PORT || 3000;
var app = express();
app.use("/cheatsheet" ,express.static(pagesPath));
app.use("/stylesheet",express.static(cssPath));
app.get('/',(request,response)=>{
response.send('Hello CSS!!!');
});
app.get('/bad',(request,response)=>{
response.send({error: 'Bad Request'});
});
app.listen(port, ()=> {
console.log(`Server is running on Port ${port}` );
console.log(__dirname);
});
// folder structure
/cheatsheet/index.html
/stylesheet/style.css