Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript express.js路由器中的自定义处理程序_Javascript_Node.js_Express - Fatal编程技术网

Javascript express.js路由器中的自定义处理程序

Javascript express.js路由器中的自定义处理程序,javascript,node.js,express,Javascript,Node.js,Express,我正在为简单的膳食信息页面工作,我需要在一个进程中运行静态和动态(json)服务器,如下所示: *- root +- index.html +- res | +- main.js | +- index.css | `- (and more) +- meal | `- custom handler here (json reqestes) `- share `- (static files, more) app.use('/share', express.

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

*- root
  +- index.html
  +- res
  | +- main.js
  | +- index.css
  | `- (and more)
  +- meal
  | `- custom handler here (json reqestes)
  `- share
    `- (static files, more)
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 */);
});

静态文件将用
express处理。静态
,我可以用express发送吗?

是的,这可以用express完成。您的设置可能如下所示:

*- root
  +- index.html
  +- res
  | +- main.js
  | +- index.css
  | `- (and more)
  +- meal
  | `- custom handler here (json reqestes)
  `- share
    `- (static files, more)
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
的目录,一个路由在
//code>发送名为
index.html
的文件,另一个路由接受一个参数,并用JSON响应

静态文件服务器将尝试处理路由未捕获的任何内容。如果文件服务器找不到文件,那么它将以404响应


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

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

无论如何,@hexa氰化物的代码应该能够处理您的情况,只需确保您的中间件功能的顺序,以便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');
});

所有不以
/mean/
开头的请求都应作为静态请求,如/res或(root)/anyfolder/anyfiles您能澄清一下您的意思吗?我想你说过,
fine
请求提供JSON,你还提到在其他地方,你想提供的JSON是动态的。如果url以
/m/
开头,由JSON处理程序处理,或者,我的示例仍然适用。任何不是
/
/mean/
的文件都作为静态文件。您只需根据自己的目的更改示例。
您真的需要为整个文件夹提供服务吗?
是的,我需要,此根目录不是(原始)项目文件夹,不包含完整的源代码。如何组织文件取决于您,就我个人而言,我将服务器端javascript代码放在作为静态目录的目录之上或附近。您应该能够替换
app.use('/share',express.static('share')
应用程序一起使用(express.static(_dirname))
为执行进程的目录提供服务。