我正在使用NodeJS(Mongoose和ExpressJS)构建REST API.我认为我目前有一个非常好的基本结构,但我想知道这类项目的最佳实践是什么.
在这个基本版本中,一切都通过app.js文件.然后将每个HTTP方法传递给已请求的资源.这允许我动态地向API添加资源,并且相应地传递每个请求.为了显示:
// app.js
var express = require('express');
var mongoose = require('mongoose');
var app = express();
app.use(express.bodyParser());
mongoose.connect('mongodb://localhost/kittens');
var db = mongoose.connection;
var resources = [
'kitten'
];
var repositories = {};
for (var i = 0; i < resources.length; i++) {
var resource = resources[i];
repositories[resource] = require('./api/' + resource);
}
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
console.log('Successfully connected to MongoDB.');
app.get('/:resource', function (req, res) {
res.type('application/json');
repositories[req.params.resource].findAll(res);
});
app.get('/:resource/:id', function (req, res) { …Run Code Online (Sandbox Code Playgroud) 我正在使用Symfony2和Doctrine2(注释)建立数据库.我完全按照示例(Doctrine2关系文档),但不知何故,当我更新我的模式(doctrine:schema:update --force)时,它创建了两个额外的表.
我的两个实体是文章和区,代码如下.
/**
*
* @var \Doctrine\Common\Collections\ArrayCollection $districts
*
* @ORM\ManyToMany(targetEntity="District", inversedBy="articles")
* @ORM\JoinTable(name="articles_districts",
* joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="district_id", referencedColumnName="id")}
* )
*/
protected $districts;
Run Code Online (Sandbox Code Playgroud)
/**
*
* @var \Doctrine\Common\Collections\ArrayCollection $articles
* @ORM\ManyToMany(targetEntity="Article", inversedBy="districts")
*/
protected $articles;
Run Code Online (Sandbox Code Playgroud)
正在创建的两个额外表是:( articles_districts我在JoinTable部分中指定的那个)和article_district(另一个以某种方式自动创建的表).
该articles_districts表按预期工作,并在创建新条目时插入ID.在article_district保持为空,因此,没什么用.我怎么摆脱它?
我正在开发一个仪表板应用程序,您可以同时显示一组模块.我想为这些模块添加多个"视图".例如,Github模块的第一个视图是您的存储库列表.单击该模块中的存储库链接时,模块中的该视图将替换为显示该存储库的所有详细信息的新屏幕.
但是,我希望在此模块中隔离此视图,以便我可以同时继续使用其他模块(我根本不想切换页面).
我可以在这里找到我想要实现的一个例子:http://jsfiddle.net/5LgCZ/
在此示例中,您将单击水果或汽车,并在新视图中获取有关该模块中所述项目的详细信息.(它目前只是执行警报).
这是我到目前为止所做的,但我不知道如何控制器和视图的结构和方法:
<div ng-app="app">
<div class="module" ng-controller="FruitCtrl">
<h1>Fruit Module</h1>
<ul>
<li ng-repeat="fruit in fruits"><a href="#" ng-click="showDetail(fruit)">{{fruit}}</a></li>
</ul>
</div>
<div class="module" ng-controller="CarCtrl">
<h1>Car Module</h1>
<ul>
<li ng-repeat="car in cars"><a href="#" ng-click="showDetail(car)">{{car}}</a></li>
</ul>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
提前感谢任何能够提供帮助的人.
我想知道AngularJS中最好的方法是保护管理页面,即普通用户不应该看到的页面.显然,会有后端身份验证,但由于AngularJS应用程序是客户端,人们理论上仍然可以查看路由并直接转到这些URL并查看管理页面.
我使用Express,PassportJS和MongoDB(Mongoose)作为我的后端.当然,他们无法与管理页面进行交互,因为在创建,删除时都有服务器端身份验证......但我更倾向于甚至不向用户提供页面,如果他们没有适当的访问.由于该应用程序完全是客户端JS,我认为这是不可能的,因为人们可以只修改路由和诸如此类的东西.最好的方法是什么?感谢您的任何意见!
我正试图获得一个AJAX响应,所以我可以摆弄它,使我的表单更容易使用.当我使控制器(下面的代码)返回正常响应时var_dump(),我得到对象的输出,所以我知道查询没有错(我使用ID 1来查询调试).但是,当我返回输出时json_encode(),我只得到一个空的JSON文件.
<div id="content">
<form id="myForm" action="{{path('snow_ajax')}}" method="POST" >
Write your name here:
<input type="text" name="name" id="name_id" value="" /><br />
<input type="submit" value="Send" />
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
<script type="text/javascript">
$(document).ready(function() {
$("#myForm").submit(function(){
var url=$("#myForm").attr("action");
$.post(url,{
formName:"ajaxtest",
other:"attributes"
},function(data){
if(data.responseCode==200 ){
alert("Got your json!");
}
else{
alert("something went wrong :(");
}
});
return false;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
public function ajaxAction()
{
$location = $this->getDoctrine()->getRepository('SnowFrontBundle:Location')
->find(1);
$output = var_dump($location);
return $output;
}
Run Code Online (Sandbox Code Playgroud)
public function …Run Code Online (Sandbox Code Playgroud) 我按照以下链接的示例进行了操作:https://github.com/hakimel/reveal.js#multiplexing,但不知何故多路复用不起作用 - 当主幻灯片更新时客户端不会更新.我已经尝试使用reveal.js demo socket.io服务器,并尝试托管我自己的.
这两个选项都不起作用,我很确定我已经正确配置它们.这是我的配置代码:
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
multiplex: {
id: 'e2bc6e79f19fbe63',
secret: '13661966883862075064',
url: 'revealjs.jit.su:80'
},
dependencies: [
{ src: '//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.10/socket.io.min.js', async: true },
{ src: 'plugin/multiplex/client.js', async: true },
{ src: 'plugin/multiplex/master.js', async: true },
]
// { src: 'plugin/search/search.js', async: true, condition: function() { return !!document.body.classList; } }
// { src: 'plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } }
});
Run Code Online (Sandbox Code Playgroud)
当我安装最新的EmberJS(1.0.0-rc.3)和最新的Handlebars(1.0.0-rc.4)时,我在访问该页面时在控制台中出现错误:
Uncaught Error: assertion failed: Ember Handlebars requires Handlebars 1.0.0-rc.3
or greater. Include a SCRIPT tag in the HTML HEAD linking to the Handlebars file
before you link to Ember.
Run Code Online (Sandbox Code Playgroud)
每当我通过下载jQuery,Handlebars和EmberJS进行'vanilla'安装时,我都会收到此错误.当我用Yeoman(发电机余烬和发电机 - 木炭)生成项目时,我也会遇到这些错误.一切都是最新的,我已经跑了
npm update -g yo generator-ember generator-charcoal grunt-cli bower
Run Code Online (Sandbox Code Playgroud)
没有找到更新.
有没有人以前遇到过这个问题,你是如何解决的?