Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 连接mongodb、主干网、grunt任务和;赫罗库_Node.js_Mongodb_Backbone.js_Gruntjs - Fatal编程技术网

Node.js 连接mongodb、主干网、grunt任务和;赫罗库

Node.js 连接mongodb、主干网、grunt任务和;赫罗库,node.js,mongodb,backbone.js,gruntjs,Node.js,Mongodb,Backbone.js,Gruntjs,我已经创建了我的应用程序的基本前端结构,并将其设置为部署到Heroku。我遵循了heroku入门教程(使用node.js),一切似乎都很好,因为我可以看到它在本地主机上运行,也可以在线运行。我还使用express驱动程序成功安装了MongoDB,并从根目录下的index.js文件连接到它。我可以从git bash终端中的控制台日志中看到此连接成功 我的主干应用程序位于根目录下一个名为“Public”的文件夹中,Grunt将其缩小为一个文件,然后放入根目录下一个名为“lib”的文件夹中 我想知道如

我已经创建了我的应用程序的基本前端结构,并将其设置为部署到Heroku。我遵循了heroku入门教程(使用node.js),一切似乎都很好,因为我可以看到它在本地主机上运行,也可以在线运行。我还使用express驱动程序成功安装了MongoDB,并从根目录下的index.js文件连接到它。我可以从git bash终端中的控制台日志中看到此连接成功

我的主干应用程序位于根目录下一个名为“Public”的文件夹中,Grunt将其缩小为一个文件,然后放入根目录下一个名为“lib”的文件夹中

我想知道如何从主干视图中访问数据库

我遵循这个例子: 但是我没有看到index.js和主干视图之间的联系以及它们之间的交互方式。我还不知道/cats json文件在哪里

我的文件夹结构如下所示:

public
--css
--fonts
--img
--js
--lib
--scss

lib
--minified-javascript-app.js

index.js
Gruntfile.js
var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/');

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
  console.log("mongoose: connected");
});

var myDbSchema = mongoose.Schema({
    name: String
});

myDbSchema.methods.logName = function () {
  var name = this.name
    ? "The name of the site is " + this.name
    : "This one don't have a name"
  console.log(name);
}

Cats = mongoose.model('Cats', myDbSchema);

var dublinCat = new Cats({ name: 'Catty1' });
console.log(dublinCat.name);

var londonCat = new Cats({ name: 'Catty1' });
londonCat.logName();

londonCat.save(function (err, cats) {
  if (err) return console.error(err);
  console.log("All sites: ",cats);
});

//end of mongoos db stuff

app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.get('/', function(request, response) {
  response.send('Hello World!');
});

app.listen(app.get('port'), function() {
  console.log("Node app is running at localhost:" + app.get('port'));
});
我的index.js文件如下所示:

public
--css
--fonts
--img
--js
--lib
--scss

lib
--minified-javascript-app.js

index.js
Gruntfile.js
var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/');

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
  console.log("mongoose: connected");
});

var myDbSchema = mongoose.Schema({
    name: String
});

myDbSchema.methods.logName = function () {
  var name = this.name
    ? "The name of the site is " + this.name
    : "This one don't have a name"
  console.log(name);
}

Cats = mongoose.model('Cats', myDbSchema);

var dublinCat = new Cats({ name: 'Catty1' });
console.log(dublinCat.name);

var londonCat = new Cats({ name: 'Catty1' });
londonCat.logName();

londonCat.save(function (err, cats) {
  if (err) return console.error(err);
  console.log("All sites: ",cats);
});

//end of mongoos db stuff

app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.get('/', function(request, response) {
  response.send('Hello World!');
});

app.listen(app.get('port'), function() {
  console.log("Node app is running at localhost:" + app.get('port'));
});

我不太清楚你是如何在nodejs上做事的

要获取主干视图所需的数据,必须使用模型/集合

型号:

主干是构成项目基础的域对象的表示形式。您将为每个主干模型定义urlRoot属性。这将标识从服务器返回数据的服务器端资源(restful服务)。主干模型提供了获取和保存数据的隐式方法。当您从模型中调用fetch方法时,get请求将使用url根传递给服务器,url中附加了id(域对象的唯一id)

例如:

假设我的应用程序正在“”上运行,则GET请求url将如下所示:

因此,在节点服务器上,您需要创建并注册一个方法,该方法可以处理请求“rest/user”并键入“GET”。同样,您需要为同一URL的POST、PUT和DELETE注册方法来处理save()和destroy()

收藏:

主干集合是一组模型。对于每个集合,可以定义一个“url”属性,用于从服务器获取数据。例如,您可以为用户列表创建一个集合,并从服务器获取用户

在上面的链接中,有一个简单且很好的带有节点的主干示例

在设计方面,最好有一个EventBus(一个自定义javascript对象),它可以创建视图所需的模型/集合,并进行获取。然后,它创建一个视图,并将获取的模型/集合传递给它,以呈现数据

  • 主干路由器处理客户端路由并委托给事件总线
  • EventBus创建视图所需的模型/集合,并进行提取
  • 在获取之后,它还会创建主干视图对象,并将获取的模型/集合传递给它
  • 视图呈现数据

  • 你好,巴拉吉,谢谢你的回复。我了解主干模型和集合,以及如何使用您所解释的方法检索数据。我的问题是我的MongoDB设置。当我从主干视图和模型调用数据库时,它会说我的“模式”/“数据库模型名称”未定义。我需要与mongoos建立连接,并需要index.js中的express等,但如何从主干模型调用我的DB。如果我定义一个urlRoot,url指向哪里?它不能是localhost,因为当我将它在线部署到heroku时,它将无法工作。'urlRoot'将是REST资源映射到的路径。因此,如果应用程序是您的“express”对象实例,并且您在urlRoot中指定了“/rest/user”,那么您应该在回调中有类似app.get(“/rest/user/:id”,callback)的内容,在回调中连接到数据库,获取数据并将其返回。如果主干客户端代码和服务器端代码在不同的环境中运行,然后,您应该使用$.ajaxPrefilter并使用运行服务器端代码的准确基本url覆盖选项中的url属性。默认情况下,主干将使用运行客户端代码的当前url基本添加urlRoot。好的,我相信我错过了创建REST服务所需的步骤。我将研究如何使用mongodb实现这一点。谢谢巴拉吉