Javascript express.js路由器中的自定义处理程序
我正在为简单的膳食信息页面工作,我需要在一个进程中运行静态和动态(json)服务器,如下所示: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.
*- 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))
为执行进程的目录提供服务。