我新建云开发QuickStart项目,按照README.md中的提示进行操作,运行时云函数报错:
upload score failed Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -504002, error message Cannot find module 'wx-server-sdk'; at cloud.callFunction api;
看样子像是服务端nodejs没安装所依赖的'wx-server-sdk'模块.
怎么才能把QuickStart项目正常运行起来?
在 uploadScore 目录下执行 npm install 安装下依赖,报错是 require 不到 wx-server-sdk
npm install 不是要在服务器的命令行下运行吗?
云开发控制台里面访问不到服务器命令行,怎么弄?
就在本地目录下安装,上传的时候会一起上传上去
依赖上传了还是报错:
upload score failed Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -504002, error message wx is not defined; at cloud.callFunction api
在云函数中使用了 wx 这个对象?在云函数运行环境中是没有这个对象的
看uploadScore/index.js中的代码,第12行,我没动过:
// 云函数入口文件
const cloud = require('wx-server-sdk')
// 与小程序端一致,均需调用 init 方法初始化
cloud.init()
// 可在入口函数外缓存 db 对象
const db = cloud.database()
// 数据库查询更新指令对象
const _ = db.command
wx.cloud = false
// 云函数入口函数
exports.main = async (event, context) => {
// 以 openid-score 作为记录 id
const docId = `${event.userInfo.openId}-score`
let userRecord
try {
const querResult = await db.collection('score').doc(docId).get()
userRecord = querResult.data
} catch(err) {
// 用户第一次上传分数
}
if (userRecord) {
// 更新用户分数
const maxScore = userRecord.scores.concat([event.score]).reduce((acc, cur) => cur > acc ? cur : acc)
const updateResult = await db.collection('score').doc(docId).update({
data: {
// _.push 指往 scores 数组字段尾部添加一个记录,该操作为原子操作
scores: _.push(event.score),
max: maxScore,
}
})
if (updateResult.stats.updated === 0) {
// 没有更新成功,更新数为 0
return {
success: false
}
}
return {
success: true,
updated: true
}
} else {
// 创建新的用户记录
await db.collection('score').add({
// data 是将要被插入到 score 集合的 JSON 对象
data: {
// 这里指定了 _id,如果不指定,数据库会默认生成一个
_id: docId,
// 这里指定了 _openid,因在云函数端创建的记录不会默认插入用户 openid,如果是在小程序端创建的记录,会默认插入 _openid 字段
_openid: event.userInfo.openId,
// 分数历史
scores: [event.score],
// 缓存最大值
max: event.score,
}
})
return {
success: true,
created: true,
}
}
}
1、注释wx.cloud = false
2、上传并部署(云端安装依赖)
解决了吗?@NevermoreReal
npm install 安装下依赖,意思是安装哪些依赖
全都安装,自动的