每次我运行时migration:generate,它都会创建一个重新生成整个数据库架构的迁移(而不是仅针对最近对我的实体所做更改的迁移)。我正在使用最新版本的 Typeorm 0.2.7 版。
我的ormconfig.json是:
{
"host": "localhost",
"logging": false,
"port": 5432,
"synchronize": false,
"type": "postgres",
"entities": ["build/server/entity/*.js"],
"migrations": ["build/server/migration/*.js"],
"cli": {
"entitiesDir": "build/server/entity",
"migrationsDir": "build/server/migration"
},
"username": "***",
"password": "***",
"database": "***"
}
Run Code Online (Sandbox Code Playgroud)
当我运行时typeorm migration:generate -n SomeEntityChanges,新的迁移文件包含为我的所有实体创建和链接表的说明,即使它们中的大多数已经在build/server/migration.
当我运行时typeorm migration:run,我可以看到没有挂起的迁移,并且已经运行了覆盖现有实体的迁移(即它们在我的migrations表中)。
我错过了什么?该文档说,migration:generate命令应该只生成与最近变化的迁移。
2015年12月14日更新:我看到下一章指示读者创建'require'模块,因此我将继续前进.这本书似乎编辑得很差 - 也许他们重新安排了一些内容,并没有注意到这些变化所犯的错误.根据我原来的问题,下面的内容肯定是乱序的.但即使这本书有一些错误,它也迫使我在外面阅读以理解这些错误,并将问题发布到SO,这有助于我学习.伙计们,感谢您的帮助!
我正在使用"使用MongoDB和Node.js进行Web开发 - 第二版"来学习Node和MongoDB(令人惊讶,对吧?).这本书的方法似乎是通过创建应用程序来引导读者,并且只是部分地解释了整个过程中的事情.所以当出现问题时,我不明白为什么会出错或如何解决它.另外,到目前为止,我在书中发现了一些代码拼写错误,所以其中一个可能导致了我的问题.
现在,我正在尝试运行本书创建的server.js文件,而且我遇到了错误.我一般都对Node,Express和完整堆栈都很陌生,所以错误可能是因为我遗漏了一些非常简单明了的东西.救命!
我的文件夹结构是: 文件夹结构 Node Modules文件夹有一堆文件夹,这是我运行此命令时创建的:npm install express morgan body-parser cookie-parser method-override errorhandler express-handlebars --save
到目前为止,我有两个文件,其内容直接从书中复制:server.js:
var express = require('express'),
config = require('./server/configure'),
app = express();
app.set('port', process.env.PORT || 3300);
app.set('views', __dirname + '/views');
app = config(app);
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(app.get('port'), function(){
console.log('Server up: http://localhost:' + app.get('port'));
});
Run Code Online (Sandbox Code Playgroud)
和/ server /文件夹中的configure.js.书中的这个文件的代码似乎有两个错别字,我在这个文件中已经更正了.(但也许我错过了其他人,或者"纠正"了那些错误.)
var path = require('path'),
routes = require('./routes'),
exphbs = require('express-handlebars'),
express = require('express'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
morgan …Run Code Online (Sandbox Code Playgroud) 我对Codepen中正在使用的特定for循环的执行顺序感到有点难过.看看这两个循环,它们都做同样的事情:
var a = ['orange','apple'];
for (var i=0; i<2;i++) {
alert(a[i]);
}
for (var j=0, fruit; fruit = a[j++];) {
alert(fruit);
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到这个:http://codepen.io/nickbarry/pen/MYNzLP/
第一个循环是编写for循环的标准,vanilla方式.正如预期的那样,它会提醒"橙色",然后是"苹果".
我使用MDN的建议编写了第二个循环(搜索"idiom",这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript).
它有效,但我不太明白为什么.我对for循环的理解显然是不正确的(不止一种方式?)是:*for循环在第一次运行之前计算第二个表达式的真实性.因此,当for循环正在评估第二个表达式的真实性时,它应该在设置fruit的值之前增加j.因此,第一次通过循环,水果应该等于"苹果".*并且循环应该只运行一次,因为在第一次通过之后,当它再次评估第二个表达式以查看它是否仍然为真时,它应该再次增加j,然后将值返回到fruit,并且因为没有值在索引位置2,它应返回一个假结果,并退出循环.
我不明白究竟发生了什么.在评估第二个表达式之前,for循环是否运行一次?但这似乎是不可能的,因为如果发生这种情况,警报会在第一时间发出警报,因为水果还没有价值.
此外,MDN文章的作者似乎喜欢编写循环的第二种方式 - 是否有更好的方法?它使用较少的字符,这是好的,我想.跳过for循环中的第三个表达式可以节省大量时间吗?或者它只是一个"它很酷,因为它很聪明"的东西?