我正在为简单的用餐信息页面工作,我需要在一个进程中运行静态和动态(json)服务器,如下所示:
*- root
+- index.html
+- res
| +- main.js
| +- index.css
| `- (and more)
+- meal
| `- custom handler here (json reqestes)
`- share
`- (static files, more)
静态文件将使用express.static
处理,我可以使用express吗?
答案 0 :(得分: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响应。
答案 1 :(得分:1)
>所有没有以/ meal /开头的请求都应该作为静态服务,例如/ res或(root)/ anyfolder / anyfile
app.use('/share', express.static('share'));
使静态处理程序在share/
中查找,而不是项目根目录。分享整个根是不常见的,因为人们可以阅读您的源代码。你真的需要服务整个文件夹吗?你可以吗?将res/
放在share/
内,然后创建一个指向res -> share/res/
的符号链接,然后当客户发出请求res/main.js
时,express知道要查看share/res/main.js
。
无论如何@ hexacyanide的代码应该处理你的情况,只需确保订购你的中间件函数,使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');
});