我从 node.js 开始,正在制作一个简单的 MVC 框架。到目前为止,我有一个前端控制器(或“调度员”,如果你愿意的话)正在工作。如图所示,路由通过调度程序配置模块发生。
我的问题在最后,紧跟在代码之后。另外,这是一个学习node的练习,请不要推荐express.js之类的。
调度程序配置.js:
var url = require('url');
(function() {
var dispatcherConfig = {
'/' : 'homeController',
'/index.html' : 'homeController',
'/sayHello.html' : 'helloController',
'404' : '404Controller'
};
module.exports.getController = function(request) {
var route = url.parse(request.url, true).pathname;
if(dispatcherConfig[route]) {
return dispatcherConfig[route];
}
return dispatcherConfig['404'];
}
}());
这由dispatcher.js使用:
var dispatcherConfig = require('./config/dispatcherConfig');
(function() {
module.exports.dispatch = function(request, response) {
var requiredController = dispatcherConfig.getController(request);
var controller = require('./controllers/' + requiredController);
controller.doService(request, response);
}
}());
这是一个示例控制器的样子(也很有效) - homeController.js:(
请暂时忽略内联视图代码)
(function() {
var homeController = {
doService: function(request, response) {
response.write('<form action="/sayHello.html" method="GET">' +
'<input id="name" name="name" size="20" />' +
'<input type="submit" value="Submit" />' +
'</form>');
}
}
module.exports.doService = function(request, response) {
return homeController.doService(request, response);
}
}());
此路由效果很好。通过进一步检查请求对象,我可以轻松地将控制器连接到 url 模式,并且正在模拟 spring 的多动作控制器类型。
这里需要做的三个明显的事情是:
- 创建视图对象
- 创建模型对象
- 绑定视图和模型
问题:
- 在 MVC(至少是 spring)中,控制器将视图与模型绑定。这是最好的方法吗?如果我单独维护一个单独的配置来描述什么视图绑定到什么模型,并且控制器只路由到一个视图。这是错误的而不是 MVC 吗?
- 在 node.js 中表示视图的好方法是什么?由于它大量基于模板,因此提供了哪些模板选项(成熟的)?
- 如果我加载一个要静态服务的文件(比如 CSS 文件,通过文件读入内存加载),并且我在 global/app 范围内保留对内容的引用,那么后续请求可以直接从内存中提供,从而产生惊人的结果速度,这个假设正确吗?事实上,我们可以保证在第一个请求进入节点服务器后(这会触发文件读取和内容被加载到 mem 中),所有后续请求都将从内存中服务(对于此类静态内容)。
- 在原始 node.js 中获取 POST 数据的低级(无框架)方法是什么?
谢谢。