我正在使用<a></a>
连接服务器和所有这些grunt
插件。在我添加一些休息电话之前,开发过程非常快。我决定制作一些示例livereload
文件,这些文件将是其余的调用答案。
所以我需要重定向每次休息调用一些JSON
文件夹(重要的是我会把它放在目标文件夹中)所以它会在 Angular 之外文件夹中。
所以我需要一些static
转移调用,如:
plugin
grunt文件:(1个应用程序服务器,1个模拟webservices)
http.get(localhost:port/x/y/name) to target/jsons_examples/x/y/name.json
http.get(localhost:port/z/name) to target/jsons_examples/z/name.json
现在我需要在web服务模拟配置中将路径从json_contracts更改为角度文件夹smth之外的路径,如:./。/。/。/ target / json_contracts
答案 0 :(得分:1)
您可以使用middleware选项注入自己的URL解析器。请参阅评论以了解其工作原理:
grunt.initConfig({
connect: {
all: {
options:{
port: 8080,
base: dir_to_angular_main_folder
hostname: "localhost",
middleware: function(connect, options, middlewares) {
middlewares.unshift(function(req, res, next) {
// pattern is a RegExp which is going to find the redirected url
var pattern = new RegExp('^/x/y/([0-9A-Z]+)$', 'i'),
// matches is a result which is
// - undefined when no match found
// - an array with two values when found:
// 0: the full string
// 1: the string inside of the brackets (the file name)
matches = req.url.match(pattern);
// if your url does not match skip the bottom part
if (!matches) return next();
// this runs only if match is found, set up the redirect header
// up to you to decide whether it is 301 or 302
// I would keep it 302 for dev purposes (browsers won't cache it)
res.writeHead(302, {
Location: '/target/jsons_examples/x/y/' + matches[1] + '.json'
});
// send the response
res.end();
});
return middlewares;
}
}
}
}
});
我猜你仍然需要将模式更改为你需要的模式(x / y / target不要作为真实姓名)。
可以说,如果不匹配此([0-9A-Z]+)
并使用此处的匹配'/target/jsons_examples/x/y/' + matches[1] + '.json'
,您可以更轻松地完成此操作,他就是对的。它的名称只是因为它更灵活,例如当你在x和y之间有一个文件夹时。无论如何,正如之前所说,你也可以使它更简单,只需使用以下内容:
res.writeHead(302, {
Location: '/target/jsons_examples' + req.url + '.json'
});
我无法测试它,也许它会给你一些错误,但我仍然希望这足以说明了什么以及如何做。
修改强>
好吧,根据您的JSON文件在Web服务器端不可见(根文件夹超出范围)的事实,您可以执行某种 url重写而不是重定向:
var fs = require('fs');
grunt.initConfig({
connect: {
all: {
options:{
port: 8080,
base: dir_to_angular_main_folder
hostname: "localhost",
middleware: function(connect, options, middlewares) {
middlewares.unshift(function(req, res, next) {
// pattern is a RegExp which is going to find the redirected url
var pattern = new RegExp('^/x/y/([0-9A-Z]+)$', 'i'),
// matches is a result which is
// - undefined when no match found
// - an array with two values when found:
// 0: the full string
// 1: the string inside of the brackets (the file name)
matches = req.url.match(pattern);
// if your url does not match skip the bottom part
if (!matches) return next();
// this runs only if match is found, set up the redirect header
// reads the file content and sends as a response
res.end(fs.readFileSync('/<some-absolute-path>/target/jsons_examples/x/y/' + matches[1] + '.json', 'utf8'));
});
return middlewares;
}
}
}
}
});
请注意,您需要在Gruntfile的顶部包含Nodejs标准fs
模块才能使其正常工作。这只是一个原型,根据您的要求改变路径。也许您还需要将mime-type编写为响应的标题,关于如何在Node中执行此操作已经有很多答案。