在Node.js App中使用View Models

时间:2015-10-14 15:49:48

标签: javascript node.js

我正在学习Node.js.这时,我正在使用ES6,Node和Express。我担心我的视图模型的范围。这时,我有以下内容:

server.js

// setup the routing
var routes = require('./routes');
app.use('/', routes.home);

路线正确注册。我在$ projectDir / routes / home.js中定义了我的路由。那个文件看起来像这样:

home.js

var router = require('express').Router();

/* GET the main page. */
router.get('/', function(req, res) {
    var viewModel = require('../viewModels/home/index');
    res.render('home/index', viewModel);
});    

/* GET the contact page. */
router.get('/contact', function(req, res) {
  var viewModel = require('../viewModels/home/contact');
  res.render('home/contact', viewModel);
});

/* POST contact information */
router.post('/contact', function(req, res) {
  // ?
});

这种方法很好用。我在$ projectDir / viewModels / home / index.js和$ projectDir / viewModels / home / contact.js中定义了我的视图模型。

index.js

var viewModel = {
    title: '',

    constructor() {
        this.title = 'Welcome';     
    }
};
module.exports = viewModel;

contact.js

var viewModel = {
    title: '',
    emailAddress: '',       

    constructor() {
        this.title = 'Contact Us';      
    }
};
module.exports = viewModel;

我对视图模型的范围有所顾虑。首先,我在两个单独的文件中使用module.exports = viewModel;。这个可以吗?或者我应该将变量命名为indexViewModelcontactViewModel?此外,当发生POST时,如何使用用户在表单中输入的值来填充视图模型?例如他们的电子邮件地址?

1 个答案:

答案 0 :(得分:0)

就节点而言,您可以在多个文件中使用相同的名称viewModel。但是为了你自己的理智和清晰的思想,我建议你使用不同的名字。当你问这个问题时,“如何填充视图模型?”,我不得不回过头来阅读代码几秒钟,看看你的意思模型。当你的程序从40行增加到4000行时,如果它们都具有相同的名称,将很难保持模型的直线。

对于POST数据,您可以使用req.body属性访问POST数据。此问题已在此处得到解答:How do you extract POST data in Node.js?