使用MongoDB、Node.js(+express)和Jade如何创建一个MVC表单

3
我被要求使用上述技术栈创建一个简单的CRUD应用程序。
然而,我的知识不足可能会阻止我以更简单的方式进行操作。
我的主要问题在于更新。我有一个从数据库中加载的对象(文档),需要将其字段映射到表单中。当修改并保存表单内容时,必须更新数据库。
我发现使用JADE动态渲染和填充表单非常容易,但是在返回过程中,我发现自己必须通过发送字符串化的JSON表单表示形式来“手动”重建对象,然后将其存储回数据库。
是否有一些自动工具可以为我执行此映射? 给定一个JSON对象和一个表单,它将处理信息的填充和保存回到模型中。
供参考,我来自SpringMVC+Hibernate背景。
教程指针或甚至是一个简单的示例都可以。谢谢!

不确定这个是否有帮助? - nkvu
4个回答

1

不完全是我想要的,但我肯定会在未来使用locomotive。 - Lenny Markus

1

像其他人一样,我肯定会推荐MongooseJS。在我刚开始尝试学习类似技术栈时,它帮了我很多。在服务器上,你可能会有这样的代码:

// Define schema
var userSchema = mongoose.Schema(
    { name: 'string',
      description: 'string',
      email: 'string',
      date: { type: Date, default: Date.now },
    });

// Instantiate db model
var User = mongoose.model('User', userSchema);

// POST from client
exports.addUser = function (req, res) {

    // req.body contains the json from the client post
    // as long as the json field names are the same as the schema field names it will map the data automatically
    var newUser = new User(req.body); 

    newUser.save(function (err) {
      if(err) {
          return res.json({error: "Error saving new user"});
      } else {
        console.log("success adding new user");
        res.json(newUser);
      }

    });
};

// PUT from client
exports.updateUser = function(req, body) {
    // this contains the updated user json
    var updatedUser = req.body;

    // here we lookup that user by the email field
    User.findOne({ 'email': updatedUser.email }, function (err, user) {
      if(err) {
        return res.json({error: "Error fetching user" });
      }
      else {
        // we succesfully found the user in the database, update individual fields:
        user.name = updatedUser.name;
        user.save(function(err) {
            if(err) {
                return res.json({error: "Error updating user"});
            } else {
                console.log("success updating user");
                res.json(updatedUser);
            }
        })
      }
    });

};

编辑* 显然Mongoose实际上有一个findOneAndUpdate方法,其本质上与我上面编写的更新模型的方法相同。 您可以在这里阅读有关它的信息。


这正是我所寻找的:var newUser = new User(req.body);谢谢! - Lenny Markus

0

我不会使用jQuery在客户端构建JSON对象。最好将该实现留给服务器端。您可以轻松地从POST变量中创建JSON对象并保存该对象。此外,我不知道您是否需要,但mongoose是一个很好的ODM(对象文档映射器),它可以帮助您制作集合文档的模型。


0
尝试使用express-orm-mvc,这是一个支持Express和ORM的简单包,带有MVC模板。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接