gpt4 book ai didi

javascript - 代码在生产环境和本地环境中表现不同

转载 作者:行者123 更新时间:2023-11-30 15:04:34 25 4
gpt4 key购买 nike

我有一个 Loopback 应用程序,我在其中创建了一些种子脚本来预填充数据库。

这是种子

const remote = {
"name": "remote",
"email": "remote@ttt.com",
"password": "arglebargle"
}

app.models.AppUser.find({where: {email: 'remoteUser@ttt.com'}})
.then(res => {
if (res.length === 0) {
createUsers(remote, 'remote')
} else {
console.log('remote user already exists')
}
})

这会调用下面的 createUsers

const app = require('../server')
const Promise = require('bluebird');

module.exports = {
createUsers: (userInfo, roleName) => {
if (!userInfo || !roleName) {
let err = new Error('please give valid user and role names')
console.log(err)
return err
}
console.log(userInfo)
return app.models.AppUser.findOrCreate({where: {'name': userInfo.name}}, userInfo)
.then((instance) => {
return app.models.Role.findOne({where: {name: roleName}})
.then((role) => {
return role.principals.create({
principalType: app.models.RoleMapping.USER,
principalId: instance[0].id //find or create returns an array
})
})
})
.catch((error) => {
return error
})
}
}

以上可能不是基于 promise 的代码。但这在其他情况下工作正常,所以我不确定我是否可以责怪它。

运行上面的脚本会创建“远程”用户并在本地为其分配“远程” Angular 色,但它在生产环境中没有执行任何操作,我就是不明白为什么。

我能想到的生产环境和本地环境之间的唯一区别是我从不同的位置调用它们(项目根目录不同)

最佳答案

我在这里看到了几个问题。首先,在这个 block 中:

  createUsers: (userInfo, roleName) => {
if (!userInfo || !roleName) {
let err = new Error('please give valid user and role names')
console.log(err)
return err
}
console.log(userInfo)
return app.models.AppUser.findOrCreate

您从一个函数返回错误和 promise 。然后在这里:

    if (res.length === 0) {
createUsers(remote, 'remote')
} else {
console.log('remote user already exists')
}

您完全忽略了 createUsers

的返回值

我会坚持 promise ,因为这似乎是你前进的方向,就像这样:

createUsers: (userInfo, roleName) => {
if (!userInfo || !roleName) {
let err = new Error('please give valid user and role names')
console.log(err)
return Promise.reject(err)
}
...

并且您必须处理每一个 promise,否则它会悄无声息地失败。

if (res.length === 0) {
createUsers(remote, 'remote')
.then(result => console.log('got a result'))
.catch(error => console.error('oh no!', error))
} else ...

而且,如果出现错误,则不会处理第一个 AppUser.find:

app.models.AppUser.find({where: {email: 'remoteUser@ttt.com'}})
.catch(err => console.error('yikes!', err))
.then(res => {

现在的代码将默默地处理 createUsers 或第一次调用中出现的任何错误。因此,生产中无法访问数据库之类的事情永远不会出现。

希望这对您有所帮助!

关于javascript - 代码在生产环境和本地环境中表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45974761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com