1

我正在为简单的膳食信息页面工作,我需要在一个进程中运行静态和动态(json)服务器,如下所示:

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

静态文件将用 处理express.static,我可以用 express 路由吗?

4

2 回答 2

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 响应。

于 2013-10-21T14:12:43.860 回答
1

所有不以 /meal/ 开头的请求都应作为静态请求,例如 /res 或 (root)/anyfolder/anyfile

app.use('/share', express.static('share'));使静态处理程序查看share/,而不是项目根目录。共享整个根目录是不寻常的,因为人们可以阅读您的源代码。你真的需要为整个文件夹提供服务吗?你能不能把它放在res/里面share/,然后做一个符号链接指向res -> share/res/,然后当客户端发出请求时,res/main.js快递知道要查看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');
});
于 2013-10-21T15:28:43.887 回答