route 设置到不同的文件( MVC 的实现)

2014-12-07 11:52:46 +08:00
 bagusflyer
我的app.js(根目录)文件如下:

var express = require('express');
var app = express();
var avosExpressHttpsRedirect = require('avos-express-https-redirect');
var path = require('path');
var fs = require('fs');

app.set('views','cloud/views'); // 设置模板目录
app.set('view engine', 'ejs'); // 设置 template 引擎

// middleware
app.use(avosExpressHttpsRedirect()); //启用HTTPS
app.use(express.bodyParser()); // 读取请求 body 的中间件

// router
app.use(app.router);

// dynamically include routes (Controller)
fs.readdirSync(__dirname+'/controllers').forEach(function (file) {
if(file.substr(-3) == '.js') {
route = require(__dirname+'/controllers/' + file);
route.controller(app);
}
});

app.listen();

我有一个Controller目录,目录下有一个Shops.js:

module.exports.controller = function(app) {

var MyObject = AV.Object.extend('TestObject');
function renderIndex(res, name){
var query = new AV.Query(MyObject);
query.skip(0);
query.limit(10);
query.descending('createdAt');
query.find({
success: function(results){
res.render('shop/query',{ name: name, restaurants: results});
},
error: function(error){
console.log(error);
res.render('500',500)
}
});
}

app.get('/', function(req, res) {
var name = req.query.name;
if(!name)
name = 'Test';
renderIndex(res, name);
});

错误信息是:

var MyObject = AV.Object.extend('TestObject');
^
ReferenceError: AV is not defined

这是什么原因?(在app.js中引用AV.Object.extend则没有问题)

谢谢
2830 次点击
所在节点    LeanCloud
2 条回复
bagusflyer
2014-12-08 01:26:35 +08:00
是不是要require什么?为什么在app.js中可以直接引用AV.Object.extend而没有任何问题?
bagusflyer
2014-12-08 01:43:39 +08:00
看到一个帖子: https://ticket.avosapps.com/tickets/5412cca6e4b080380a48a918/threads

根据其说明运行:npm install avoscloud-sdk后,删除main.js中的函数,就可以正常运行,但似乎版本不正确?(0.45)。不过,不明白的是为什么在app.js中可以直接调用AV,不出现问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/152120

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX