2013-10-21 213 views
1

我工作了便饭信息页面,我需要在一个进程中运行的静态和动态(JSON)服务器,就像这样:自定义处理

*- root 
    +- index.html 
    +- res 
    | +- main.js 
    | +- index.css 
    | `- (and more) 
    +- meal 
    | `- custom handler here (json reqestes) 
    `- share 
    `- (static files, more) 

静态文件将处理与express.static,我可以用快递路线吗?

回答

1

所有请求/应担任静,像/ RES或(根)/ anyfolder/anyfile

app.use('/share', express.static('share'));使静态处理程序看起来share/,而不是项目根。共享整个根是很不寻常的,因为人们可以阅读你的源代码。你真的需要提供整个文件夹吗?你可以把res/放在share/里面,然后做一个符号链接指向res -> share/res/,然后当客户端发出请求时res/main.js表示知道在share/res/main.js中查找。

反正@六氰化物的代码应该处理你的情况下,只要确保订购您的中间件功能,使得Express之前静态文件处理路由功能:

app.use(app.router) 
app.use('/share', express.static('share')); 

app.get('/meal/:param', function(req, res) { 
    // use req.params for parameters 
    res.json(/* JSON object here */); 
}); 
// if you want to prevent anything else starting with /meal from going to 
// static just send a response: 
//app.get('/meal*', function(req, res){res.send(404)}); 

app.get('/', function(req, res) { 
    res.sendfile('index.html'); 
}); 
+0

'你真的需要为整个文件夹服务吗?' 是的,我需要,这个根不是(原始)项目文件夹,并且不包含整个源代码。 – hibiya

+0

这取决于您如何组织您的文件,我个人将我的服务器端javascript代码放置在静态目录的上方或旁边。你应该可以用app.use(express.static(__ dirname))替换'app.use('/ share',express.static('share'));'为进程所在的目录提供服务执行。 – Plato

1

是的,这可以用Express来完成。您的设置可能是这样的:

app.use('/share', express.static('share')); 
app.get('/', function(req, res) { 
    res.sendfile('index.html'); 
}); 
app.get('/meal/:param', function(req, res) { 
    // use req.params for parameters 
    res.json(/* JSON object here */); 
}); 

如果你有一个接受一个参数一个静态文件服务器安装/share和路由到名为/share目录,路线在/它发送称为index.html的文件和路径,用JSON响应。

任何未被路由捕获的东西都将被尝试由静态文件服务器处理。如果文件服务器没有找到一个文件,那么它会用不带/餐开始一个404

+0

没有用'/餐开始的所有请求/'应送达静态,像/ res或(root)/任何文件夹/ anyfile – hibiya

+0

你能澄清你的意思吗?我以为你说'用餐'请求服务JSON,并且你在其他地方提到你想要服务的JSON是动态的。 – hexacyanide

+0

如果URL以'/ m /'开始,由json处理程序处理,否则,静态 – hibiya