olo*_*olo 3 mongodb node.js express angularjs
我使用express,它带有玉模板引擎. app.js
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
Run Code Online (Sandbox Code Playgroud)
对于每个模板,我将需要res.render渲染html标头,如果我不使用res.render,模板/页面将不会显示.路线/ index.js
router.get('/', function(req, res, next) {
res.render('index', { title: 'Bookshop' });
});
router.get('/data', function(req, res, next) {
res.render('data', { title: 'Bookshop | Categories' });
});
router.get('/items', function(req, res, next) {
res.render('items', { title: 'Bookshop | Items' });
});
Run Code Online (Sandbox Code Playgroud)
在app.js我已经正确设置了我的MongoDB.
var mongojs = require('mongojs');
var db = mongojs('book', ['books']);
Run Code Online (Sandbox Code Playgroud)
我要实现的是将MongoDB数据库传递给angular,然后在jade文件中循环.myscript.js
app.controller('appCtrl', function ($scope, $http) {
$http.get('/data').then(function(res){
console.log(res.data);
$scope.books = res.data;
});
});
Run Code Online (Sandbox Code Playgroud)
data.jade文件看起来像这样
p(ng-repeat="item in books")
span {{item.name}}
span {{item.barcode}}
span {{item.price}}
Run Code Online (Sandbox Code Playgroud)
现在我被困在如何将数据库传递给myscript.js.我无法在app.js中这样做
router.get('/data', function(req, res, next) {
var db = req.db;
db.zero.find(function (err, docs) {
res.json(docs)
});
});
Run Code Online (Sandbox Code Playgroud)
原因是正在使用jade模板,并且需要使用res.render才能正确显示页面,但是如果我使用router.get('/data', function(req, res, next) {
res.render('data', { title: 'Bookshop | Categories' });
});我无法通过数据库.
我知道我无法同时使用res.render和res.json.是否存在将数据库传递给角度的解决方案?或者我必须将玉转换为HTML?我相信如果我使用我可以使用的html文件res.json
谢谢
否.res.render()呈现模板并将其发送给客户端.响应Content-Type使用时首标res.render()将是text/html例如.但是res.json()以json格式将数据发送到客户端,因此Content-Type响应的标头将是application/json.
UPDATE
你必须创建两条路线才能达到你想要的效果.第一条路线将渲染您的玉石模板.并且为了在Angular控制器中从服务器检索数据作为JSON,您需要使用另一个路由.例如:
router.get('/data', function(req, res, next) {
res.render('data', { title: 'Bookshop | Categories' });
});
router.get('/data.json', function(req, res, next) {
var db = req.db;
db.myCollection.find(function (err, docs) {
if(err) {
// Handle error
} else {
res.json({title: 'Data', 'mydata': docs});
}
});
});
Run Code Online (Sandbox Code Playgroud)
在Angular控制器中,您使用第二条路径,如下所示:
$http.get('/data.json').then(function(res) {
console.log(res.data);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12071 次 |
| 最近记录: |