- weui组件引用总是报错?
报错提示如下: [Component] the type of property "search" is illegal (when preparing behavior "miniprogram_npm/weui-miniprogram/searchbar/searchbar" 没有调用searchbar,就会报这个错误。这是如何引起的,应该如何调整?
2022-07-14 - 全局配置:"lazyCodeLoading": "requiredComponents" 不能真机调
全局配置:"lazyCodeLoading": "requiredComponents" app.json 配置不能真机调试 app.json 不配置真机正常 [图片]
2020-10-22 - wx.uploadFile中的filePath 要上传文件资源的路径 (本地路径)?
这里面的本地路径 仅仅 指的是 拍照生成的图片路径,选择手机相册图片的生成的图片路径吗? 项目文件夹中的图片路径 比如/img/1.png 这种图片路径行吗? 还有服务器中的图片路径 比如https://xx.xx.com/img/xx.png 这种图片路径行吗? 项目文件夹中的图片路径和服务器中的图片路径 我试了不行 有谁可以吗? [图片] 这里的图片就是项目文件夹和服务器的图片 选择保存上传 不行
2020-09-22 - 小程序用户头像昵称获取(含部分常见问题)
小程序用户头像昵称获取 引言 前段时间,小程序头像昵称获取的接口进行了调整,原公告《小程序用户头像昵称获取规则调整公告》。 简单来说,现在获取用户的微信头像和昵称要用户自己填写了。 下面和大家分享一下「头像昵称填写能力」的实操过程。 「头像昵称填写功能」实操 一、头像部分 WXML 首先,在wxml页面上添加一个[代码]button[代码]组件,设置[代码]open-type[代码]属性为[代码]chooseAvatar[代码],再添加一个触发事件[代码]bindchooseavatar[代码],代码如下: [代码] <button open-type="chooseAvatar" bindchooseavatar="bindchooseavatar"> <image src="{{avatarUrl}}"></image> </button> [代码] 我这里在[代码]button[代码]里面添加了[代码]image[代码]组件是为了实现点击头像(图片)就触发头像选择。 JS 在js部分,写好[代码]bindchooseavatar[代码]事件回调。 [代码] bindchooseavatar(e) { console.log("avatarUrl",e.detail.avatarUrl) } [代码] 当我们触发组件,选择好头像后,我们可以从事件回调中得到头像链接[代码]avatarUrl[代码]。 我这里获取到的链接是: [代码]http://tmp/bnMmEbfpqclVa77acadd216b18c692b3a2aa1d505353.jpeg[代码]。 [图片] 需要注意的是 这里获取到的是本地临时链接,只能在本地中读取与使用,随时会失效。 我们还需要将这个临时路径保存到服务器中,从而换取一个永久链接。 我们可以用API[代码]wx.uploadFile[代码]将图片上传到自己的服务器,改写后的[代码]bindchooseavatar[代码]事件回调代码如下: [代码] bindchooseavatar(e) { const avatarUrl = e.detail.avatarUrl console.log("avatarUrl", avatarUrl) wx.uploadFile({ url: 'https://www.hlxuan.top/upload', // 仅为示例,非真实的接口地址 filePath: avatarUrl, name: 'file', // 文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容 formData: { 'user': 'test' }, // HTTP 请求中其他额外的 form data success (res){ const data = JSON.parse(res.data) // do something } }) } [代码] 如果你用的是小程序云开发,[代码]bindchooseavatar[代码]事件回调代码示例如下: [代码] bindchooseavatar(e) { const avatarUrl = e.detail.avatarUrl console.log("avatarUrl", avatarUrl) wx.cloud.uploadFile({ cloudPath: 'example.png', // 上传至云端的路径 filePath: avatarUrl, // 小程序临时文件路径 success: res => { // 返回文件 ID console.log(res.fileID) // do something }, fail: console.error }) } [代码] 二、昵称部分 WXML 组件自带安全检测功能,根据官方的文档说明,检测是在[代码]onBlur[代码]事件触发时异步进行的,也就是说,如果使用[代码]bindinput[代码]、[代码]bindblur[代码]、[代码]bindfocus[代码]、[代码]bindconfirm[代码]这些的回调去获取用户输入的昵称,就可能会获取到未通过安全检测的内容。 在基础库2.29.1中,新加入了回调 [代码]bindnicknamereview[代码],当安全检测完成后会进行回调 [代码]event.detail = { pass, timeout }[代码] 。 你可以用这个判断用户当前输入的昵称是否通过了安全检测,和检测是否超时。 文章内容更新于2022年12月29日 建议使用表单[代码]form[代码]来收集用户输入的昵称。 [图片] [代码] <form bindsubmit="formsubmit"> <input type="nickname" placeholder="请输入昵称" name="nickname" /> <button form-type="submit" type="primary">提交</button> </form> [代码] 我们需要给[代码]input[代码]设置一个[代码]name[代码]属性,这样才能在回调中获取到用户输入的昵称。 JS [代码] formsubmit(e){ const nickName = e.detail.value.nickname console.log("nickName", nickName) // do something }, [代码] 获取到用户输入的昵称后,你可以将其保存到数据库里面。 Q&A 下面是我在微信开放社区经常看到的一些问题,稍微整理了一下,希望能帮助大家。 1. 为什么「wx.getUserProfile」返回的是“灰色头像”和“微信用户”? 「wx.getUserProfile」接口有调整,参考公告《小程序用户头像昵称获取规则调整公告》。 2. 为什么有部分小程序仍能使用以前的接口获取头像? 公告中:“生效期前发布的小程序版本不受影响”。你看到接口能正常返回头像和昵称的小程序,基本上都是在生效期前发布的小程序,你可以去「更多资料」页面看看它的更新时间。 [图片] 针对下面这个问题,我这边测试了一下,生效期后发布的小程序,基础库低于2.27.1版本,是可以正常返回微信头像和昵称的。这个目前应该只能在 PC/macOS 平台上使用,手机上大部分使用不了的,因为 PC/macOS 平台目前的基础库版本低于2.27.1,所以可以正常返回微信头像和昵称。 [图片] 文章内容更新于2022年12月29日 3. 我调整了基础库版本后,工具上可以返回头像和昵称,真机就不行了? 用户客户端的基础库版本开发者是无法控制的,这个基础库版本会随着微信客户端的更新而更新,可以看下「基础库版本分布」。 在开发者工具上设置的基础库版本,仅用于开发者工具内的调试,所以不能调整移动设备的基础库版本。 [图片] 旁边的「推送」按钮只能将基础库版本推送到你登录开发者工具的微信号上(登录这个微信号的手机上),这并不能改变用户的基础库版本。 4. 我在小程序后台设置了基础库2.27.0或以下版本,为什么还是不能获取头像和昵称? 小程序后台里面设置的是「基础库最低版本设置」,当用户的基础库版本低于你设置的最低版本要求时,将无法正常使用小程序,并提示更新微信版本。 [图片] 5. 「头像昵称填写」有安全检测吗? 有的,组件在基础库2.24.4版本起,已经接入了内容安全服务端口。如果昵称或头像有异常时,页面会显示消息提示框,输入的昵称会被清空,头像也不会返回临时路径。请不要完全依赖内容安全服务。 6. 选择的头像会自动裁剪为1:1吗? 对于来自基础库2.28.1及以上版本,组件自带压缩和裁剪功能;对于来自基础库2.28.1以下版本,你可以做兼容处理。 经验分享:我在自己的小程序里面进行了判断,当基础库2.28.1以下版本时,调用「wx.cropImage」接口对用户选择的头像进行裁剪。 7. 为什么获取到的头像链接在浏览器上打不开? 通过「头像填写能力」获取到的链接为本地临时链接,只能在本地中读取与使用,随时会失效。 [图片]
2023-01-08 - python后端接收uploadFile文件上传问题
网上大多教程后端都用Java或者PHP实现,本人因需求,就直接用python+flask了,由于是新人,就遇到下面的问题了: 前端wx.uploadFile()上传图片 ,后端能收到formdata里的数据,却收不到图片,即lal为null 前端代码: [图片] python代码 [图片] 这是要上传的图片临时路径,即res.tempFilePaths的路径[图片] 请问我接收图片的方式对吗?还是有别的问题? 在这寻求帮助,谢谢啦
2019-02-22 - 小程序app.onLaunch与page.onLoad异步问题的最佳实践
场景: 在小程序中大家应该都有这样的场景,在onLaunch里用wx.login静默登录拿到code,再用code去发送请求获取token、用户信息等,整个过程都是异步的,然后我们在业务页面里onLoad去用的时候异步请求还没回来,导致没拿到想要的数据,以往要么监听是否拿到,要么自己封装一套回调,总之都挺麻烦,每个页面都要写一堆无关当前页面的逻辑。 直接上终极解决方案,公司内部已接入两年很稳定: 1.可完美解决异步问题 2.不污染原生生命周期,与onLoad等钩子共存 3.使用方便 4.可灵活定制异步钩子 5.采用监听模式实现,接入无需修改以前相关逻辑 6.支持各种小程序和vue架构 。。。 //为了简洁明了的展示使用场景,以下有部分是伪代码,请勿直接粘贴使用,具体使用代码看Github文档 //app.js //globalData提出来声明 let globalData = { // 是否已拿到token token: '', // 用户信息 userInfo: { userId: '', head: '' } } //注册自定义钩子 import CustomHook from 'spa-custom-hooks'; CustomHook.install({ 'Login':{ name:'Login', watchKey: 'token', onUpdate(token){ //有token则触发此钩子 return !!token; } }, 'User':{ name:'User', watchKey: 'userInfo', onUpdate(user){ //获取到userinfo里的userId则触发此钩子 return !!user.userId; } } }, globalData) // 正常走初始化逻辑 App({ globalData, onLaunch() { //发起异步登录拿token login((token)=>{ this.globalData.token = token //使用token拿用户信息 getUser((user)=>{ this.globalData.user = user }) }) } }) //关键点来了 //Page.js,业务页面使用 Page({ onLoadLogin() { //拿到token啦,可以使用token发起请求了 const token = getApp().globalData.token }, onLoadUser() { //拿到用户信息啦 const userInfo = getApp().globalData.userInfo }, onReadyUser() { //页面初次渲染完毕 && 拿到用户信息,可以把头像渲染在canvas上面啦 const userInfo = getApp().globalData.userInfo // 获取canvas上下文 const ctx = getCanvasContext2d() ctx.drawImage(userInfo.head,0,0,100,100) }, onShowUser() { //页面每次显示 && 拿到用户信息,我要在页面每次显示的时候根据userInfo走不同的逻辑 const userInfo = getApp().globalData.userInfo switch(userInfo.sex){ case 0: // 走女生逻辑 break case 1: // 走男生逻辑 break } } }) 具体文档和Demo见↓ Github:https://github.com/1977474741/spa-custom-hooks 祝大家用的愉快,记得star哦
2023-04-23 - wx.checkSession有必要使用吗?
微信服务器的session有效期和服务器本地session的有效期不可能保持完全一致,这在拉取服务器用户数据时候会存在问题。 看到的一个文档的文字: 因为session也存在有效,一旦我们请求业务的CGI后台判断登录态失效了,那么前端可以根据后台返回的错误码来判断是否重新登录。 所以就没有必要每次wx.checkSession,而且wx.checkSession几乎是没有用的到必要,因为登录态可以由我们业务维护,一旦失效,wx.login()重新换回一个session_key 就ok了嘛。 结论是:wx.checkSession几乎没有必要调用,而且他本身耗时,长达300+ms。 有人解答下吗
2018-02-01