我有两组命令要依次运行,第一个是数据库种子,第二个是实际的服务器启动,但是由于某种原因,nodejs没有运行第二个命令,让我给您展示一下脚本
package.json
"scripts": {
"start": "ts-node src/seeder/seedCompanies && ts-node-dev --respawn src/index.ts"
}
第一个命令是种子,它的代码是
SeedCompanies.ts
import { Company } from "../entity/Company";
import { Product } from "../entity/Product";
import { ProductColor } from "../entity/ProductColor";
import { ProductSize } from "../entity/ProductSize";
import { createConnection } from "typeorm";
import bcrypt from "bcryptjs";
createConnection().then((connection): Promise<void> => {
for (let i = 0; i <= 1; i++) {
let company = new Company();
company.name = `Company ${Math.random().toString(36).substring(4)}`,
company.email = `email${Math.random().toString(36).substring(4)}@gmail.com`,
company.address = "Demo Address",
company.password = bcrypt.hashSync('123', 10),
company.website = "website.com"
connection.manager
.save(company)
.then(company => {
for (let j = 0; j < 10; j++) {
let product = new Product();
//randon name for product as seeder will run on every server start
product.name = `Product ${Math.random().toString(36).substring(5)}`;
product.description = "Seed product";
product.image = "https://picsum.photos/200/300";
product.company = <any>company.id;
connection.manager
.save(product).then(product => {
let productColor = new ProductColor();
productColor.color = "#000";
productColor.product = <any>product.id
connection.manager
.save(productColor)
let productSize = new ProductSize();
productSize.size = "XL";
productSize.product = <any>product.id
connection.manager
.save(productSize)
})
}
});
}
return <any>null;
})
现在种子工作得很好,我可以看到添加的数据,但问题是nodejs卡在这个脚本的末尾,没有显示任何错误
query: SELECT `ProductSize`.`id` AS `ProductSize_id`, `ProductSize`.`size` AS `ProductSize_size` FROM `product_size` `ProductSize` WHERE `ProductSize`.`id` = ? -- PARAMETERS: [60]
query: COMMIT
query: COMMIT
query: COMMIT
这是我尝试使用的终端中的最后几行
process.exit(1)
但是这会关闭服务器,我如何才能转到package.json中的下一个线程/命令呢?
NPM脚本显示:
...: "ts-node src/seeder/seedCompanies && ts-node-dev --respawn ..."
其中的指示“只有在前一个命令成功退出时才运行下一个命令”。要在节点进程中执行此操作,可以使用
您需要在
createConnection()
.then((connection): Promise<any> => {
// Use the connection, waiting for it to finish
// See below for comments!
}).then(() => {
// Seeding successful
return process.exit(0);
})
.catch((err): Promise<any> => {
// Seeding Failed
return process.exit(1);
});
注意,在您的示例代码中,您并没有等待