NodeJS - AngularJS同时发送JSON对象并渲染模板?

时间:2017-04-28 15:26:41

标签: javascript angularjs node.js ajax express

我的api有些问题。 我将NodeJS与ExpressJS Routing和AngularJS一起使用。

我想要做的是渲染模板(ejs)并同时发送一个json对象。

在我的路线文件夹中,我有index.js文件(包含一小部分):

router.get('/data', function(req, res, next){
    Planning.getPlanningM(function(resultat){
        res.json(resultat);
        res.render('index');
    });
});

关于变量resultat我确定它包含我想要的结果。但我不能做res.json和res.render。由于发送函数的两次调用。

在我的角度中,我有一个功能:

    var resultat = []
    $http.get('/data')
    .success(function(res){
        angular.extend(resultat, res.data);
    })
    .error(function(res){
        console.log('err');
    })
    return resultat;

目标是渲染我的index.ejs并在此页面中显示我的计划。但我找不到解决办法。 这是我第一次询问stackoverflow,英语不是我的母语。请不要对我粗鲁:)

2 个答案:

答案 0 :(得分:0)

我不熟悉EJS,我使用了把手,但你应该能够像渲染渲染函数一样传递数据 -

...
res.render("index", { data:resultat }); 
...

然后以EJS使用的任何格式在模板中访问它。对于hbs,它看起来像

...
<div>My data looks like this: {{data}}</div>
...

同样,EJS肯定会采用不同的方式,请参考文档以确保您拥有正确的格式。

答案 1 :(得分:0)

感谢您的回答MPawlak!它帮助了我! 我想要的是像你一样用渲染发送数据。

但是我想在我的角度工厂(我的工厂填充控制器,这部分工作)中获取/获取此数据,我之前显示:

var resultat = []
$http.get('/data')
.success(function(res){
    angular.extend(resultat, res.data);
})
.error(function(res){
    console.log('err');
})
return resultat;

使用您的方法,我可以直接将此数据放入我的视图中,并且它可以正常工作!谢谢!

<pre> <%= data %> </pre>

所以我在想一个肮脏的临时解决方案来做到这一点:

<textarea ng-model="planning"> <%= data %> </textarea>

但是,当我想展示这个计划时,它不起作用并保持空洞......我不明白为什么。

但是为了获得一个好的和干净的解决方案,我认为这不是一个好主意,所以我的问题是一样的...如何直接在角度工厂中获取这些数据?