我应该如何在Node.js + jade + angularJS + mongoose中显示来自后端的数据

时间:2016-05-24 12:44:26

标签: javascript angularjs node.js mongodb express

我将使用以下网址制作网络应用程序(SPA)

  • 后端:Node.js(express)
  • 前端:Jade + AngularJS
  • 数据库:Mongoose

我将以这种方式将数据(作为表单)发送到后端ExpressJS AngularJS POST(检查答案) 这将是简单的CRUD。

但是我想知道如何从后端显示数据? 例如:

我将运行应用程序

var Partner = require('../model/partners');
router.get('/', function (req, res) {
    Partner.find({}, function (err, partnerList) {
        if (err) throw err;

        res.render('campaign', {
            partnerList: partnerList
        });
    });
});

我应该如何显示数据(partnerList)。也许这样?

- each item in partnerList
  = item.name

或许还有另一种更好的角度来在视图中显示数据?我之所以要问,因为我以后要从items删除或更新partnerList(CRUD操作)。这可能是个问题,因为我必须将item._id作为参数发送给角度函数?

例如,如果我要添加按钮以删除记录:

- each item in partnerList
  = item.name
  button(type='remove' ng-click="sub('#{item._id}')")

script.
  app.controller('view1Ctrl', function($scope, $http) {
    $scope.sub = function(id) {
        $http.post('/',id).
        success(function(data) {
            console.log("posted successfully");
        }).error(function(data) {
            console.error("error in posting");
        })
    }
});

可能它不会正常工作

2 个答案:

答案 0 :(得分:0)

我认为首选方法是设置从快速到专门渲染JSON的第二条路线,然后使用angular的$http方法获取该数据并在控制器中使用它。如果你想用一个路由来做,你可以将JSON数据作为字符串传递给服务器端的视图,但它可能会有点不守规矩。

// app.js
...
partnerList: JSON.stringify(partnerList);
...

// index.jade
div(ng-repeat="item in partnerList")
  p {{ item.name }}
  button(type='remove', ng-click="sub(item._id)")
...
script.
  app.controller('view1Ctrl', function($scope, $http) {
    $scope.partnerList = JSON.parse(#{partnerList});
    ...

编辑要使用JSON字符串示例,您必须使用Unbuffered Code语法进行渲染。但我不确定你会如何在script.区块内做到这一点。要改为分别提供服务JSON的路由,请将服务器路由更改为:

var Partner = require('../model/partners');

router.get('/', function (req, res) {
    res.render('campaign');
});

router.get("/partner-list", function(req, res) {
    Partner.find({}, function (err, partnerList) {
        if (err) throw err;

        res.json({ partnerList: partnerList });
    });
});

然后,您的角度代码将使用/partner-list查询$http.get()路径。

script.
    app.controller('view1Ctrl', function($scope, $http) {
        $http.get("/partner-list").then(function(result) {
            $scope.partnerList = result.data.partnerList;
        });
        ...
    });

答案 1 :(得分:0)

如前所述,从我的观点来看,我倾向于将后端所需的最少数据发送到客户端,但这取决于您的基础架构和并发用户。

示例1

  • 你有一个+ 5K并发用户的网络应用程序,在这种情况下更好地处理所有巨大的东西,或者你需要在你的后端硬件上花很多钱。

实际案例:

  • 用户在博客页面中发布新评论。您清理后端的文本字符串并将其放在您首选的数据存储区中......但只能使用像{"status": "ok"}这样的简单json进行响应。如果前端重新开始,请使用客户端在POST阶段发送到后端的文本字符串修改DOM,但不要再发送带有此(例如)500个字符注释的所有HTML。
  • 如果服务器以{"status":"error"}回复,请修改DOM以让用户知道他的评论有什么问题(更多指定的json消息{"status":"error", "data":"you comment is bigger than 500 chars"}

问题:

  • 您需要额外的前端代码来处理客户端的这些情况。所以这可能"也许"会在第一次访问您的网页时对用户造成影响。

优点:

  • 减少硬件成本
  • 整体减少服务器响应时间。
  • 更多用户互动网站随时只对DOM的某些部分进行建模。
  • ...

示例2:

  • 您有一个简单的页面,并发用户较少。然后你选择。让你后端处理一切?或继续使用json响应?

我总是使用第一个例子。希望这对您的问题有所帮助。