【问题标题】:Parse is undefined in Node JS Controller解析在 Node JS 控制器中未定义
【发布时间】:2015-09-20 16:35:25
【问题描述】:

我正在尝试使用 Parse.com 构建 Node JS + Express Web 应用程序。我的服务器 js 中有这个:

var express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    Parse = require('parse').Parse;
    projects = require('./controllers/projects');

// Parse fun
Parse.initialize('MY_APP_ID_HERE', 'MY_JS_KEY');

app.use(bodyParser.urlencoded({ extended: false }));

app.get('/projects',projects.index);
app.get('/projects/new',projects.new);

app.listen(9000);

现在在我的项目控制器中:

module.exports.create = function(req,res){
    var projectObject = Parse.Object.extend("ProjectObject");
    var project = new projectObject();
    project.save(req.body).then(function(object) {
        res.redirect('/projects');
    });
};

module.exports.index = function(req,res){
    var projectObject = Parse.Object.extend("ProjectObject");
    var query = new Parse.Query(projectObject);
    query.limit(100);
    query.first({
        success: function(projects) {
            // Successfully retrieved the projects.
            res.json(projects);
        },
        error: function(error) {
            console.log("Error: " + error.code + " " + error.message);
        }
    });
};

这是我得到的错误:

ReferenceError: 解析未定义 在 module.exports.create ([REST_OF_PATH_REMOVED]/app/controllers/projects.js:5:22) 在 Layer.handle [as handle_request] ([REST_OF_PATH_REMOVED]/app/node_modules/express/lib/router/layer.js:95:5) 在下一个([REST_OF_PATH_REMOVED]/app/node_modules/express/lib/router/route.js:131:13) 在 Route.dispatch ([REST_OF_PATH_REMOVED]/app/node_modules/express/lib/router/route.js:112:3) 在 Layer.handle [as handle_request] ([REST_OF_PATH_REMOVED]/app/node_modules/express/lib/router/layer.js:95:5) 在 [REST_OF_PATH_REMOVED]/app/node_modules/express/lib/router/index.js:277:22 在 Function.process_params ([REST_OF_PATH_REMOVED]/app/node_modules/express/lib/router/index.js:330:12) 在下一个([REST_OF_PATH_REMOVED]/app/node_modules/express/lib/router/index.js:271:10) 在 [REST_OF_PATH_REMOVED]/app/node_modules/body-parser/lib/read.js:121:5 完成后([REST_OF_PATH_REMOVED]/app/node_modules/body-parser/node_modules/raw-body/index.js:233:14)

【问题讨论】:

    标签: node.js express parse-platform


    【解决方案1】:

    简单的答案是移动

    var Parse = require('parse').Parse;
    

    Parse.initialize('MY_APP_ID_HERE', 'MY_JS_KEY');
    

    到您的项目控制器。根据发布的代码,它们在您的 server.js 文件中不是必需的。

    【讨论】:

    • 不幸的是,它仍然显示“Parse is undefined”,并在将初始化行添加到项目控制器的顶部时抱怨它。
    • 你是否使用'npm install parse'安装了解析模块?
    • 是的,我已经安装了解析。我将它作为依赖项包含在 packages.json 中。我只是运行它“npm install parse”以防万一它仍然未定义。
    • 如果我把它移到控制器上,这是否意味着每一个控制器我都要再次声明它?
    • 如何在server.js中声明并在多个控制器中使用?
    【解决方案2】:

    解析超出了 fn 的范围。您可以按照之前的建议将声明带到您的控制器中,或者(尽管不是一个好的做法)将 Parse 设为全局(请注意不要覆盖应用程序其他部分中的变量)

    app.js

    ...
    
    global.Parse = require('parse').Parse;
    
    ...
    

    controller.js

    ...
    
    new Parse.query ...
    
    ...
    

    【讨论】:

    • 我是否必须为我创建的每个控制器添加声明?这似乎不对。我也不想让它成为一个全局变量。
    • 如果你把它设为全局,你就不需要在其他任何地方声明它,它将是一个无所不在的变量(就像浏览器上的window
    • 使其全局化肯定不是一个好习惯,如果你不喜欢那么你需要在每个控制器上声明它,只要确保你在函数范围内声明它,即:@987654324 @module.exports.create ...
    猜你喜欢
    • 2016-02-18
    • 2017-11-04
    • 2021-08-14
    • 1970-01-01
    • 2018-06-17
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多