When I tried to deploy this function to Firebase using firebase cli, it is giving error in the cli. What this function does is
exports.register = functions.https.onRequest((request, response) => {
const db = admin.firestore();
const user: string = request.body['username'];
const phone: number = request.body['phone'];
const password: string = request.body['password'];
return db.collection('rejectedContacts').where('contact', '==', phone).get()
.then(snapShot => {
if (snapShot.size > 0) {
return response.json(
{
status: 0,
message: `Contact, ${phone} is blocked, please try again with another number`,
result: null
}
);
} else {
return db.collection('users').where('contacts.phone', '==', phone).get()
.then(snapShot => {
if (snapShot.size > 0) {
return response.json(
{
status: 0,
message: `Contact, ${phone} is already assigned with an accont.
Did you forgot your pasword?`,
result: null
}
);
} else {
return db.collection('users').add(
{
user: user,
password: password,
isBlocked: false,
joiningDate: Date.now(),
phoneVerified: false,
deleted: false,
contacts:
{
phone: phone
}
}
).then((writeResult) => {
return response.json(
{
result: `User with ID: ${writeResult.id} added.`
}
);
});
}
});
}
});
});
The error I am getting in the cli is this
=== Deploying to 'functionstest-54bd9'...
i deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint
> functions@ lint /home/me/Documents/TfmFirebase/functions
> tslint -p tslint.json
ERROR: /home/me/Documents/TfmFirebase/functions/src/index.ts[98, 27]: Shadowed name: 'snapShot'
WARNING: /home/me/Documents/TfmFirebase/functions/src/index.ts[140, 9]: Identifier 'phone' is never reassigned; use 'const' instead of 'let'.
WARNING: /home/me/Documents/TfmFirebase/functions/src/index.ts[141, 9]: Identifier 'password' is never reassigned; use 'const' instead of 'let'.
WARNING: /home/me/Documents/TfmFirebase/functions/src/index.ts[145, 9]: Identifier 'queryRef' is never reassigned; use 'const' instead of 'let'.
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! functions@ lint: `tslint -p tslint.json`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the functions@ lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/me/.npm/_logs/2018-02-13T17_43_10_045Z-debug.log
Error: functions predeploy error: Command terminated with non-zero exit code2
this is the log
0 info it worked if it ends with ok
1 verbose cli [ '/home/me/.nvm/versions/node/v9.5.0/bin/node',
1 verbose cli '/home/me/.nvm/versions/node/v9.5.0/bin/npm',
1 verbose cli '--prefix',
1 verbose cli '/home/me/Documents/TfmFirebase/functions',
1 verbose cli 'run',
1 verbose cli 'lint' ]
2 info using npm@5.6.0
3 info using node@v9.5.0
4 verbose run-script [ 'prelint', 'lint', 'postlint' ]
5 info lifecycle functions@~prelint: functions@
6 info lifecycle functions@~lint: functions@
7 verbose lifecycle functions@~lint: unsafe-perm in lifecycle true
8 verbose lifecycle functions@~lint: PATH: /home/me/.nvm/versions/node/v9.5.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/me/Documents/TfmFirebase/functions/node_module$
9 verbose lifecycle functions@~lint: CWD: /home/me/Documents/TfmFirebase/functions
10 silly lifecycle functions@~lint: Args: [ '-c', 'tslint -p tslint.json' ]
11 silly lifecycle functions@~lint: Returned: code: 2 signal: null
12 info lifecycle functions@~lint: Failed to exec lint script
13 verbose stack Error: functions@ lint: `tslint -p tslint.json`
13 verbose stack Exit status 2
13 verbose stack at EventEmitter.<anonymous> (/home/me/.nvm/versions/node/v9.5.0/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:285:16)
13 verbose stack at EventEmitter.emit (events.js:160:13)
13 verbose stack at ChildProcess.<anonymous> (/home/me/.nvm/versions/node/v9.5.0/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack at ChildProcess.emit (events.js:160:13)
13 verbose stack at maybeClose (internal/child_process.js:943:16)
13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5)
14 verbose pkgid functions@
15 verbose cwd /home/me/Documents/TfmFirebase
16 verbose Linux 4.10.0-42-generic
17 verbose argv "/home/me/.nvm/versions/node/v9.5.0/bin/node" "/home/me/.nvm/versions/node/v9.5.0/bin/npm" "--prefix" "/home/me/Documents/TfmFirebase/functions" "run" "lint"
18 verbose node v9.5.0
19 verbose npm v5.6.0
20 error code ELIFECYCLE
21 error errno 2
22 error functions@ lint: `tslint -p tslint.json`
22 error Exit status 2
23 error Failed at the functions@ lint script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 2, true ]
but when I separated the function into three separated functions (1. check for rejected contact, 2. Check if the number is in use, 3. register number) it worked. Bit i don't want to make three calls to register a user and each function call counts in cloud functions.
Can anyone tell what is wrong with the code?
The TSLint predeploy hook in your project is giving you one error and three warnings:
ERROR: /home/me/Documents/TfmFirebase/functions/src/index.ts[98, 27]: Shadowed name: 'snapShot'
WARNING: /home/me/Documents/TfmFirebase/functions/src/index.ts[140, 9]: Identifier 'phone' is never reassigned; use 'const' instead of 'let'.
WARNING: /home/me/Documents/TfmFirebase/functions/src/index.ts[141, 9]: Identifier 'password' is never reassigned; use 'const' instead of 'let'.
WARNING: /home/me/Documents/TfmFirebase/functions/src/index.ts[145, 9]: Identifier 'queryRef' is never reassigned; use 'const' instead of 'let'.
You don't have to fix the warnings, but you have to fix the error (or disable the TSLint predeploy hook).
The error in the first line is saying that you're shadowing one variable name with another. This is sometimes an indication of a programming error. The variable is snapShot
, and you're using it twice, one nested inside a function within the other. You can fix this by changing the name of one of the uses so that the other one doesn't get redefined.
You could also restructure your promises so that they're not nested.