V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeanCloud
LeanCloud
bagusflyer
V2EX  ›  LeanCloud

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

  •  
  •   bagusflyer · 2014-12-07 11:52:46 +08:00 · 2966 次点击
    这是一个创建于 3637 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的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则没有问题)

    谢谢
    2 条回复    2014-12-08 01:43:39 +08:00
    bagusflyer
        1
    bagusflyer  
    OP
       2014-12-08 01:26:35 +08:00
    是不是要require什么?为什么在app.js中可以直接引用AV.Object.extend而没有任何问题?
    bagusflyer
        2
    bagusflyer  
    OP
       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,不出现问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3647 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 10:38 · PVG 18:38 · LAX 02:38 · JFK 05:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.