我有两个要顺序运行的命令,第一个是数据库种子,第二个是实际的服务器启动,但是由于某种原因,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 ..."
该&&
有表示“下一个命令只运行,如果前面的命令退出成功”。要在Node进程中执行此操作,请process.exit
使用0
not进行调用1
。有关退出代码的一些详细信息,请参见此处。
您需要在seedCompanies
脚本中指定播种成功或失败的时间。就像是:
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);
});
请注意,在示例代码中,您没有等待for ...
循环内的promise链完成。您需要适当地执行此操作,以确保退出之前数据已完成播种。如果您需要那里的帮助,可能是另一个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句