如何将模型和控制器合并到我的节点.js应用程序中
How Do I Incorporate Models and Controllers In My Node.js App?
所以我正在尝试将数据库功能添加到我的简单网站中,这让我感到难以置信。我可以使用基本控制器,但是一旦合并模型,混乱就开始了。如果控制器在客户端运行,我该如何导入我的模型?我不能使用require,因为它是服务器端的。然而,无论我在网上看到哪里,他们都只是在控制器中使用require。在哪里存储模型和控制器,以及如何将它们正确合并到视图中?我假设的是模型和控制器必须以某种方式在服务器端使用,然后将信息传输到视图。如果它如此混乱,我一定在这里错过了一个大概念。我对所有这些部分如何相互作用的理解很糟糕,我觉得这是由我对这些东西的知识的巨大差距造成的。如果有人可以链接一个好的资源来更好地了解这些东西的基本原理,这样我就不会再犯这些愚蠢和令人沮丧的错误,我将不胜感激:)非常感谢你们和女孩
型:
var mongoose = require("mongoose");
var PostSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
content: {
type: String,
required: true
},
imgUrl: {
type: String,
required: true
},
uploadDate: {
type: Date,
required: true
},
lastUpdated: {
type: Date,
required: true
}
});
PostSchema.pre("save", function(next) {
var currentDate = new Date();
if(!this.uploadDate) {
this.uploadDate = currentDate;
}
this.lastUpdated = currentDate;
next();
});
var Post = mongoose.model("Post", PostSchema);
module.exports = Post;
视图:
头.翡翠:
//- CSS
link(href="bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet")
link(href="stylesheets/style.css" rel="stylesheet")
//- Scripts
script(src="bower_components/angular/angular.min.js")
script(src="bower_components/jquery/dist/jquery.min.js")
script(src="bower_components/bootstrap/dist/js/bootstrap.min.js")
script(src="app/app.js")
title #{title} | Vagablog
布局.翡翠:
doctype html
html(ng-app="app")
head
include head.jade
block scripts
body
.container-fluid
.row
.col-xs-12
#logo-container
img(class="img-responsive" id="logo" src="../images/logo.png")
include nav.jade
block content
block footer
索引.翡翠:
extends partials/layout
block scripts
script(src="app/controllers/PostCtrl.js")
block content
div(ng-controller="PostCtrl")
.row
.col-xs-9
#main
.row
.col-xs-12
form(class="form-horizontal" ng-submit="post(title, content, image)")
.form-group
label(for="inputTitle" class="col-sm-2 control-label") Title
.col-sm-10
input(required type="text" class="form-control" id="inputTitle" placeholder="Title" ng-model="title")
.form-group
label(for="inputContent" class="col-sm-2 control-label") Content
.col-sm-10
textarea(required class="form-control" id="inputContent" placeholder="Content" ng-model="content")
.form-group
label(for="inputImg" class="col-sm-2 control-label") Image URL
.col-sm-10
input(required type="text" class="form-control" id="inputImg" placeholder="Image URL" ng-model="image")
.form-group
.col-sm-offset-2.col-sm-10
button(type="submit" class="btn btn-default") Post
.row
.col-xs-12
div(ng-repeat="post in getPosts()")
hr
.well
h2 {{ post.title }}
h4 {{ post.content }}
img(src="{{ post.imgUrl }}")
p Uploaded: {{ post.uploadDate }}
p Last Updated: {{ post.lastUpdated }}
.col-xs-3
.row
.col-xs-12
#sidebar
.well(style="height: 500px;")
block footer
.row
.col-xs-12
hr
.footer
h4(class="copyright") Footer
控制器:
(function() {
var Post = require("../models/post");
var PostCtrl = function ($scope, $log, $location) {
$scope.post = function (postTitle, postContent, postImage) {
var newPost = Post({
title: postTitle,
content: postContent,
imgUrl: postImage,
uploadDate: new Date(),
});
newPost.save(function(err) {
if (err) {
throw err;
};
});
};
$scope.getPosts = function() {
Post.find({}, function(err, posts) {
if (err) {
throw err;
};
return posts;
});
};
};
app.controller("PostCtrl", ["$scope", "$log", "$location", PostCtrl]);
})();
许多错误:
ReferenceError: require is not defined
PostCtrl.js:3:6
"Error: [ng:areq] http://errors.angularjs.org/1.4.9/ng/areq?p0=PostCtrl&p1=not%20a%20function%2C%20got%20undefined
GET
http://localhost:3000/%7B%7B%20post.imgUrl%20%7D%7D [HTTP/1.1 500 Internal Server Error 4ms]
您遇到的问题是混合客户端和服务器代码。你要做的是创建一个 API,公开客户端应用可以访问的路由。这些路由将返回猫鼬查询。
本文应提供设置 API 服务器所需的一切
关于客户端代码,您需要创建具有 angular 的工厂,这些工厂具有针对每个相应端点的函数。在这些函数中,您可以利用 $http
服务从资源读取和更改数据。这可以像这样完成:
angular.module('myApp')
.factory('bearsFactory', ['$http', function($http) {
var urlBase = 'localhost:9000/api/bears';
return {
getBears: function () {
return $http.get(urlBase);
},
getBear: function (id) {
return $http.get(urlBase + '/' + id);
},
createBear: function (bear) {
return $http.post(urlBase, bear);
},
updateBear: function (bear) {
return $http.put(urlBase + '/' + bear.ID, bear)
},
deleteBear: function (id) {
return $http.delete(urlBase + '/' + id);
}
}
}]);
然后在控制器中,您可以像这样利用这些工厂:
angular.module('myApp')
.controller('bearController', ['$scope', 'bearsFactory', function ($scope, bearsFactory) {
$scope.getBears() {
bearsFactory.getBears()
.success(function (bears) {
$scope.bears = bears;
})
.error(function (error) {
$scope.status = 'Unable to load bear data: ' + error.message;
});
}
}]);
相关文章:
- gcloud节点-我如何确保通过签名URL上传到谷歌云存储的文件是公开可读的
- 只需添加一个'允许跨来源请求'到我的节点应用程序工作
- 我在启动我的节点时遇到问题.js IRC 机器人
- 为什么我的html节点保持类ng隐藏属性ng show=true
- 在我的html中使用节点函数
- 不存在的XML节点破坏了我的脚本
- 我的基于节点的咖啡脚本未运行(错误%1不是有效的应用程序.)
- 如何判断我的 Firebase 节点是否被使用
- 如何在 Windows 中调试/逐步执行/监视我的节点.js
- 为什么我无法让我的图像出现在表格单元格/节点中.也许我可以得到一些结束
- 节点.js为什么我的会话对象在添加值后为空
- 我想隐藏树网格(带列的树面板)中非叶节点上的复选框
- 从 2 个得分最高的节点列表中获取 3 个节点(我自己设置的属性)
- 节点如何找到我的应用.js索引
- 节点.js将我的模块连接在一起而不会变得一团糟
- d3js:节点在我的树形图中无法正确折叠
- 如何存储我的节点 mysql 密码而不是纯文本
- 如何在我的节点 js 脚本中列出所有函数
- 我应该如何解析传递给节点模块的路径
- req.session.user 在我的节点.js项目中不是“全局”