求教 Sokcet 链接复用问题

问题描述 如何保持一个 socket 的连接不断开,并且能重复使用。 问题出现的环境背景及自己尝试过哪些方法 服务端是 python 客户端是 nodejs 相关代码 server def create_server(): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((‘127.0.0.1’, 9080)) # 绑定要监听的端口 server.listen(5) # 开始监听 while True: conn, addr = server.accept() # 等待链接 print(conn, addr) while True: try: data = conn.recv(1024) # 接收数据 if not data: break dataStr = data.decode() print(‘recive:’, dataStr) # 打印接收到的数据 conn.send(data.upper()) # 然后再发送数据 if dataStr == “exit”: break except ConnectionResetError as e: print(‘关闭了正在占线的链接!’) break conn.close() def run(): create_server() client var net = require(‘net’) var host = ‘127.0.0.1’ var port = 9080 var client = null $(“#conBtn”).click(function(){ getConn(); }) $(“#sendBtn”).click(()=>{ let val = $(“#content”).val() send(val) }) function getConn(){ client = net.createConnection(port, host) client.on(‘connect’, ()=>{ console.log(“已成功连接服务器”) }) client.on(‘data’, (data)=>{ console.log(‘收到服务器返回消息: ‘, data) }) client.on(‘close’, function(data){ console.log(‘客户端:连接断开’); }); return client } function send(val){ client.end(val) } 你期待的结果是什么?实际看到的错误信息又是什么? 期望结果:我希望客户端和服务端只需要建立一次连接, 每次我想要发送数据到服务端的时候,直接调用 send(val) 方法即可。 实际是:如果我在 server 端不添加 if not data: break client 端发送随意发送字符串 “a”,server 接收到数据 “a” 后,就开始无限的读取空数据。 client 如果强行继续发送数据,报错: Uncaught Error [ERR_STREAM_WRITE_AFTER_END]: write after end 但我添加上对 data 数据的判断后, conn 就被close了, 客户端与服务端就断开了连接。客户端如果想再发送数据,就必须重新建立连接。 问题描述 如何保持一个 socket 的连接不断开,并且能重复使用。 问题出现的环境背景及自己尝试过哪些方法 服务端是 python 客户端是 nodejs 相关代码 server def create_server(): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((‘127.0.0.1’, 9080)) # 绑定要监听的端口 server.listen(5) # 开始监听 while True: conn, addr = server.accept() # 等待链接 print(conn, addr) while True: try: data = conn.recv(1024) # 接收数据 if not data: break dataStr = data.decode() print(‘recive:’, dataStr) # 打印接收到的数据 conn.send(data.upper()) # 然后再发送数据 if dataStr == “exit”: break except ConnectionResetError as e: print(‘关闭了正在占线的链接!’) break conn.close() def run(): create_server() client var net = require(‘net’) var host = ‘127.0.0.1’ var port = 9080 var client = null $(“#conBtn”).click(function(){ getConn(); }) $(“#sendBtn”).click(()=>{ let val = $(“#content”).val() send(val) }) function getConn(){ client = net.createConnection(port, host) client.on(‘connect’, ()=>{ console.log(“已成功连接服务器”) }) client.on(‘data’, (data)=>{ console.log(‘收到服务器返回消息: ‘, data) }) client.on(‘close’, function(data){ console.log(‘客户端:连接断开’); }); return client } function send(val){ client.end(val) } 你期待的结果是什么?实际看到的错误信息又是什么? 期望结果:我希望客户端和服务端只需要建立一次连接, 每次我想要发送数据到服务端的时候,直接调用 send(val) 方法即可。 实际是:如果我在 server 端不添加 if not data: break client 端发送随意发送字符串 “a”,server 接收到数据 “a” 后,就开始无限的读取空数据。 client 如果强行继续发送数据,报错: Uncaught Error [ERR_STREAM_WRITE_AFTER_END]: write after end 但我添加上对 data 数据的判断后, conn 就被close了, 客户端与服务端就断开了连接。客户端如果想再发送数据,就必须重新建立连接。

nodejs项目上传到centos服务器之后上传文件功能报错

项目用nodejs开发,做了一个后台上传文件的功能,本地测试时是好的,但是传到服务器之后就不行了,上传文件时报错。报错信息: 服务器上有对应的文件目录 项目用nodejs开发,做了一个后台上传文件的功能,本地测试时是好的,但是传到服务器之后就不行了,上传文件时报错。报错信息: 服务器上有对应的文件目录

怎么才能更好地处理populate关联数据表中的数据?

这一段的代码用的是try-await来实现异步处理 addCommodities 是即将添加的商品对象数组existCommodities 是用户数据库中已存在的商品对象数组 现在我的问题是,如果把拿到的关联表数据data,放在回调函数中去处理,那么就会出现多次返回请求的错误。如果把处理data的这段程序段放到exec回调函数外,就会因为异步而获取不到数据。。 我知道可以用Promise解决这个问题,但不知道如何写。。还忘各位帮帮小弟 这一段的代码用的是try-await来实现异步处理 addCommodities 是即将添加的商品对象数组existCommodities 是用户数据库中已存在的商品对象数组 现在我的问题是,如果把拿到的关联表数据data,放在回调函数中去处理,那么就会出现多次返回请求的错误。如果把处理data的这段程序段放到exec回调函数外,就会因为异步而获取不到数据。。 我知道可以用Promise解决这个问题,但不知道如何写。。还忘各位帮帮小弟

小程序内webview回跳刷新问题

1、场景:以下是跳转的逻辑、请问有没有大神知道怎么刷新?? 小程序 [navigateTo 跳转] webview [navigateTo 跳转] 小程序 [navigateBack 跳转] webview的时候 怎么让当前的H5 进行刷新? 1、场景:以下是跳转的逻辑、请问有没有大神知道怎么刷新?? 小程序 [navigateTo 跳转] webview [navigateTo 跳转] 小程序 [navigateBack 跳转] webview的时候 怎么让当前的H5 进行刷新?

内网环境使用npm下载外网包?

只有内网环境,如何满足工作中需要npm install外网包? 我的设想:1.在一台电脑先连上外网部署cnpm私服(获取其他方式的私服),然后下载一些常用的npm包2.在内网开发时,如果需要安装npm包,就把那台电脑接入到内网中,开发人员从私服下载npm包.不知道这样行不行,请实践过的大佬回答一下,谢谢! 只有内网环境,如何满足工作中需要npm install外网包? 我的设想:1.在一台电脑先连上外网部署cnpm私服(获取其他方式的私服),然后下载一些常用的npm包2.在内网开发时,如果需要安装npm包,就把那台电脑接入到内网中,开发人员从私服下载npm包.不知道这样行不行,请实践过的大佬回答一下,谢谢!

UTC时间精度问题 1000-01-01 00:00:00

new Date(‘1000-01-01 00:00:00’).toISOString() // “0999-12-31T15:54:17.000Z” new Date(“0999-12-31T15:54:17.000Z”) // 注意这里的 +0805 // Wed Jan 01 1000 00:00:00 GMT+0805 (中国标准时间) new Date(‘1900-01-01 00:00:00’).toISOString() // “1899-12-31T15:54:17.000Z” new Date(“1899-12-31T15:54:17.000Z”) // 注意这里的 +0805 // Mon Jan 01 1900 00:00:00 GMT+0805 (中国标准时间) new Date().toISOString() // “2020-05-13T03:48:47.210Z” new Date(“2020-05-13T03:48:47.210Z”) // 这里是 +0800 // Wed May 13 2020 11:48:47 GMT+0800 (中国标准时间) 这是 feature 还是 issue? 目前还发现有的浏览器会出现不一样的行为 new Date(‘1000-01-01 00:00:00’).toISOString() // “0999-12-31T15:54:17.000Z” new Date(“0999-12-31T15:54:17.000Z”) // 注意这里的 +0800 // Tue Dec 31 0999 23:54:17 GMT+0800 (GMT+08:00) new Date(‘1000-01-01 00:00:00’).toISOString() // “0999-12-31T15:54:17.000Z” new Date(“0999-12-31T15:54:17.000Z”) // 注意这里的 +0805 // Wed Jan 01 1000 00:00:00 GMT+0805 (中国标准时间) new Date(‘1900-01-01 00:00:00’).toISOString() // “1899-12-31T15:54:17.000Z” new Date(“1899-12-31T15:54:17.000Z”) // 注意这里的 +0805 // Mon Jan 01 1900 00:00:00 GMT+0805 (中国标准时间) new Date().toISOString() // “2020-05-13T03:48:47.210Z” new Date(“2020-05-13T03:48:47.210Z”) // 这里是 +0800 // Wed May 13 2020 11:48:47 GMT+0800 (中国标准时间) 这是 feature 还是 issue? 目前还发现有的浏览器会出现不一样的行为 new Date(‘1000-01-01 00:00:00’).toISOString() // “0999-12-31T15:54:17.000Z” new Date(“0999-12-31T15:54:17.000Z”) // 注意这里的 +0800 // Tue Dec 31 0999 23:54:17 GMT+0800 (GMT+08:00)

vue打包后代理请求返回404

vue项目打包后,之前设置的代理就失效了,我在服务器(centos8)上部署了vue项目后,发现请求api接口返回了404 之前的代理文件 api接口服务器是和vue部署的服务器是同一台服务器 nginx配置文件 有没有哪位大神知道是怎么回事啊?是因为我nginx配置的有问题吗? vue项目打包后,之前设置的代理就失效了,我在服务器(centos8)上部署了vue项目后,发现请求api接口返回了404 之前的代理文件 api接口服务器是和vue部署的服务器是同一台服务器 nginx配置文件 有没有哪位大神知道是怎么回事啊?是因为我nginx配置的有问题吗?

node如何读取element这些声明文件的内容

我想通过node读取文件的形式把所有声明文件的props读取来。但现在读到的是整个文件的内容,字符串的样子。下一步我该怎么处理呢? 具体代码如下:读到的内容: 我想通过node读取文件的形式把所有声明文件的props读取来。但现在读到的是整个文件的内容,字符串的样子。下一步我该怎么处理呢? 具体代码如下:读到的内容:

请问TypeORM多对多关系如何进行分页查询?

我使用TypeORM的ManyToMany装饰器进行多对多关联,关键代码为 // person.entity.ts @JoinTable({ name: ‘person_group’, joinColumn: { name: ‘personId’, referencedColumnName: ‘id’, }, inverseJoinColumn: { name: ‘groupId’, referencedColumnName: ‘id’, }, }) @ManyToMany(() => GroupEntity, group => group.persons, { cascade: [‘insert’, ‘update’] }) public groups: Array<GroupEntity>; // group.entity.ts @ManyToMany(() => PersonEntity, person => person.groups, { cascade: [‘insert’, ‘update’] }) public persons: Array<PersonEntity>; 生成了3张表,分别是person, group, person_group,我现在需要分页查询group id为1的所有用户,直接使用sql查询为 select * from person where person.id in ( select personId from person_group where person_group.groupId = 1) limit 0,10 请问怎么使用TypeORM的API进行这种查询呢? 我使用TypeORM的ManyToMany装饰器进行多对多关联,关键代码为 // person.entity.ts @JoinTable({ name: ‘person_group’, joinColumn: { name: ‘personId’, referencedColumnName: ‘id’, }, inverseJoinColumn: { name: ‘groupId’, referencedColumnName: ‘id’, }, }) @ManyToMany(() => GroupEntity, group => group.persons, { cascade: [‘insert’, ‘update’] }) public groups: Array<GroupEntity>; // group.entity.ts @ManyToMany(() => PersonEntity, person => person.groups, { cascade: [‘insert’, ‘update’] }) public persons: Array<PersonEntity>; 生成了3张表,分别是person, group, person_group,我现在需要分页查询group id为1的所有用户,直接使用sql查询为 select * from person where person.id in ( select personId from person_group where person_group.groupId = 1) limit 0,10 请问怎么使用TypeORM的API进行这种查询呢?

用nodeJS讲MongoDB中的数据导入导入mysql的时候出现了一个奇怪的问题。

如题:我想把MongoDB里面的数据拿到之后,再重新用MySQL的语句insert到数据库,但是报错了,应该是语法里面有一个细节的东西。 nodeJS: connection.query(`INSERT INTO NEWSLIST(news_title,news_time,author_name,author_image,news_url,news_tag,reptile_time,news_image,content_image,news_content) values(“${news_title}”,”${news_title}”,”${news_time}”,”${author_name}”,”${author_image}”,”${news_url}”,”${news_tag}”,”${reptile_time}”,”${news_image}”,”${content_image}”,”${news_content}”)`, (err,result) \=> { if(err) throw err console.log(result) }) Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘参与支持“反中乱港” “台独”分子李孟居被捕””,””参与支�’ at line 1 code: ‘ER_PARSE_ERROR’,errno: 1064,sqlMessage: ‘You have an error in your SQL syntax; check the manual that ‘ +’corresponds to your MySQL server version for the right ‘ +’syntax to use near ‘参与支持“反中乱港” “台独”分子李孟居被捕””,””参与支�’ at ‘ +’line 1’,sqlState: ‘4 因为mysql很长时间没用了,不知道怎么处理。 望各位大神不吝赐教。 如题:我想把MongoDB里面的数据拿到之后,再重新用MySQL的语句insert到数据库,但是报错了,应该是语法里面有一个细节的东西。 nodeJS: connection.query(`INSERT INTO NEWSLIST(news_title,news_time,author_name,author_image,news_url,news_tag,reptile_time,news_image,content_image,news_content) values(“${news_title}”,”${news_title}”,”${news_time}”,”${author_name}”,”${author_image}”,”${news_url}”,”${news_tag}”,”${reptile_time}”,”${news_image}”,”${content_image}”,”${news_content}”)`, (err,result) \=> { if(err) throw err console.log(result) }) Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘参与支持“反中乱港” “台独”分子李孟居被捕””,””参与支�’ at line 1 code: ‘ER_PARSE_ERROR’,errno: 1064,sqlMessage: ‘You have an error in your SQL syntax; check the manual that ‘ +’corresponds to your MySQL server version for the right ‘ +’syntax to use near ‘参与支持“反中乱港” “台独”分子李孟居被捕””,””参与支�’ at ‘ +’line 1’,sqlState: ‘4 因为mysql很长时间没用了,不知道怎么处理。 望各位大神不吝赐教。

vue路由 根据#后面的url显示对应的菜单

比如http://localhost:8080/#/1 那么菜单(路由)显示的是1下面的菜单 如果http://localhost:8080/#/2那么菜单(路由)显示的是2下面的菜单 我直接修改路由不生效 比如http://localhost:8080/#/1 那么菜单(路由)显示的是1下面的菜单 如果http://localhost:8080/#/2那么菜单(路由)显示的是2下面的菜单 我直接修改路由不生效

node.js 安装supervisor使用

最近刚开始学习node.js,按照教程npm install -g supervisor,全局安装了supervisor,但是当我supervisor tools.js时,命令行窗口一直刷新 我的node版本是 v10.15.1 请教下各位大神 这是怎么回事呢? 最近刚开始学习node.js,按照教程npm install -g supervisor,全局安装了supervisor,但是当我supervisor tools.js时,命令行窗口一直刷新 我的node版本是 v10.15.1 请教下各位大神 这是怎么回事呢?

node里面koa ctx返回数据不使用return 无法返回

在自学node.js,使用的是koa做到路由这个部分,发现一个关于promise的问题 连接数据库的代码:mysql.js const mysql = require(‘mysql’) const config = { database: “first_app”, user: ‘root’, host: ‘localhost’, password: ‘root’, port: 3306 } const pool = mysql.createPool(config) function query(sql, params) { return new Promise((resolve, reject) => { pool.query(sql, params, (err, data) => { if (err) { reject(err) } resolve(data) }) }) } module.exports = query 后台操作代码waresList.js const query = require(‘../utils/mysql’) async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let res = query(sql, params).then(data => { console.log(2) ctx.body = data }) console.log(1); return res } module.exports = waresList 最后是路由router.js const Router = require(‘koa-router’) const router = new Router({ prefix: ‘/api’ }) let getWaresList = require(‘../wares/waresList’) router.get(‘/’, ctx => { ctx.body = ‘<p>路由为:/</p>’ }) // 重点看这个 router.get(‘/getWaresList/:id’, getWaresList) router.get(‘*’, ctx => { ctx.body = ‘<h1>没有这个接口</h1>’ }) module.exports = router 出现了这样的现象在waresList.js中,如果我写了return res那么可以正常返回结果如果把return 去掉最终都被执行了,但是却没有返回 换个写法,使用await的方式也同样有效果 // 依然会有返回结果 async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let data = await query(sql, params) ctx.body = data } 总结一下两种情况和写法 // 这样是无效的 async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; query(sql, params).then(data => { console.log(2); ctx.body = data }) } 有效的三种写法 async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let data = await query(sql, params) ctx.body = data } async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let res = query(sql, params).then(data => { console.log(2); ctx.body = data }) return res } async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; return query(sql, params).then(data => { console.log(2); ctx.body = data }) } 问题: 在无效写法中,then里面的方法依然被执行了,并且所有ctx是对的,不明白为什么无效 return res中,依然先执行return,然后执行then,也就是说先返回了promise结果,是不是把then里的执行方法也给返回到外层函数执行了 对于promise还算了解,用的还挺多,但是这种情况真的是第一次见到,有没有朋友知道这是为什么 在自学node.js,使用的是koa做到路由这个部分,发现一个关于promise的问题 连接数据库的代码:mysql.js const mysql = require(‘mysql’) const config = { database: “first_app”, user: ‘root’, host: ‘localhost’, password: ‘root’, port: 3306 } const pool = mysql.createPool(config) function query(sql, params) { return new Promise((resolve, reject) => { pool.query(sql, params, (err, data) => { if (err) { reject(err) } resolve(data) }) }) } module.exports = query 后台操作代码waresList.js const query = require(‘../utils/mysql’) async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let res = query(sql, params).then(data => { console.log(2) ctx.body = data }) console.log(1); return res } module.exports = waresList 最后是路由router.js const Router = require(‘koa-router’) const router = new Router({ prefix: ‘/api’ }) let getWaresList = require(‘../wares/waresList’) router.get(‘/’, ctx => { ctx.body = ‘<p>路由为:/</p>’ }) // 重点看这个 router.get(‘/getWaresList/:id’, getWaresList) router.get(‘*’, ctx => { ctx.body = ‘<h1>没有这个接口</h1>’ }) module.exports = router 出现了这样的现象在waresList.js中,如果我写了return res那么可以正常返回结果如果把return 去掉最终都被执行了,但是却没有返回 换个写法,使用await的方式也同样有效果 // 依然会有返回结果 async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let data = await query(sql, params) ctx.body = data } 总结一下两种情况和写法 // 这样是无效的 async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; query(sql, params).then(data => { console.log(2); ctx.body = data }) } 有效的三种写法 async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let data = await query(sql, params) ctx.body = data } async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; let res = query(sql, params).then(data => { console.log(2); ctx.body = data }) return res } async function waresList(ctx) { let params = [ctx.params.id] let sql = `SELECT * FROM wares_type WHERE parent_id = ?`; return query(sql, params).then(data => { console.log(2); ctx.body = data }) } 问题: 在无效写法中,then里面的方法依然被执行了,并且所有ctx是对的,不明白为什么无效 return res中,依然先执行return,然后执行then,也就是说先返回了promise结果,是不是把then里的执行方法也给返回到外层函数执行了 对于promise还算了解,用的还挺多,但是这种情况真的是第一次见到,有没有朋友知道这是为什么

table数据渲染失败

用的koa+vue+mongoose搭建的项目,post向数据库提交数据,然后通过get渲染到前端。报错: 代码和数据:post数据:服务端代码 打印的数据: 前端代码: 求问怎么样让前端得到数组数据呢 用的koa+vue+mongoose搭建的项目,post向数据库提交数据,然后通过get渲染到前端。报错: 代码和数据:post数据:服务端代码 打印的数据: 前端代码: 求问怎么样让前端得到数组数据呢

一道关于事件循环的笔试题

我的答案是(现已修改为正确答案 并 通过运行验证):(1)执行 new Counter() // 执行new Counter() timer1,NaN,1024 timer2,1,1024, timer1,NaN,1024+996 timer1,NaN,1024+996*2 timer1,NaN,1024+996*3 timer1,NaN,1024+996*4 timer1,NaN,1024+996*5 timer1,NaN,1024+996*6 timer1,NaN,1024+996*7 (2)执行 Counter() // 执行Counter() timer1,1,1024 timer2,2,1024, timer1,3,1024+996 timer1,4,1024+996*2 timer1,5,1024+996*3 timer1,6,1024+996*4 timer1,7,1024+996*5 timer1,8,1024+996*6 timer1,9,1024+996*7 不知道是否正确,可以顺便讲一下考点吗?方便查缺补漏,感谢~ 我的答案是(现已修改为正确答案 并 通过运行验证):(1)执行 new Counter() // 执行new Counter() timer1,NaN,1024 timer2,1,1024, timer1,NaN,1024+996 timer1,NaN,1024+996*2 timer1,NaN,1024+996*3 timer1,NaN,1024+996*4 timer1,NaN,1024+996*5 timer1,NaN,1024+996*6 timer1,NaN,1024+996*7 (2)执行 Counter() // 执行Counter() timer1,1,1024 timer2,2,1024, timer1,3,1024+996 timer1,4,1024+996*2 timer1,5,1024+996*3 timer1,6,1024+996*4 timer1,7,1024+996*5 timer1,8,1024+996*6 timer1,9,1024+996*7 不知道是否正确,可以顺便讲一下考点吗?方便查缺补漏,感谢~

关于node的问题?

使用express框架 get请求,路由传参包含中文,导致无法响应?这是为什么,有什么解决办法吗 使用express框架 get请求,路由传参包含中文,导致无法响应?这是为什么,有什么解决办法吗

连接同一WiFi的手机设备无法访问电脑主机上的Web服务器

问题描述 手机设备与笔记本电脑连接在同一路由器下,笔记本上启动Web服务器之后通过手机设备使用IP地址访问Web服务器下的index.html文件,但无法访问,页面提示”ERR_ADDRESS_UNREACHABLE”。之后又ping手机设备的IP地址,结果如下图: 问题出现的环境背景及自己尝试过哪些方法? 1、笔记本电脑环境: 系统: Microsoft Windows 10 专业版 路由器型号:TP-Link 防火墙状态:已关闭 2、排除Node服务器本身的原因 1、将项目部署到Nginx服务器上,通过手机设备访问电脑主机启动的项目,发现仍然不可行,暂时排除Node服务器的问题 2、将项目在本地电脑主机上通过IP地址访问,可行,完全排除Node服务器本身的问题 3、尝试过的解决方法: (1)尝试解决方法一: 有人说是路由器设置了【AP隔离】,然后我去了解了路由器的AP隔离功能并关闭了它,重复上次的手机设备使用IP地址访问Web项目,页面仍然提示”ERR_ADDRESS_UNREACHABLE”,未解决问题。 (2)尝试解决方法二: 有人说,通过电脑启动一个热点供手机连接,我选择了360免费WiFi,但瞬间就把笔记本也给弄断网了,尝试了好多次都是笔记本断网收尾,因此这种解决方法最终不了了之。 你期待的结果是什么? 启动服务器之后,能够通过手机设备使用IP地址访问Web服务器 问题描述 手机设备与笔记本电脑连接在同一路由器下,笔记本上启动Web服务器之后通过手机设备使用IP地址访问Web服务器下的index.html文件,但无法访问,页面提示”ERR_ADDRESS_UNREACHABLE”。之后又ping手机设备的IP地址,结果如下图: 问题出现的环境背景及自己尝试过哪些方法? 1、笔记本电脑环境: 系统: Microsoft Windows 10 专业版 路由器型号:TP-Link 防火墙状态:已关闭 2、排除Node服务器本身的原因 1、将项目部署到Nginx服务器上,通过手机设备访问电脑主机启动的项目,发现仍然不可行,暂时排除Node服务器的问题 2、将项目在本地电脑主机上通过IP地址访问,可行,完全排除Node服务器本身的问题 3、尝试过的解决方法: (1)尝试解决方法一: 有人说是路由器设置了【AP隔离】,然后我去了解了路由器的AP隔离功能并关闭了它,重复上次的手机设备使用IP地址访问Web项目,页面仍然提示”ERR_ADDRESS_UNREACHABLE”,未解决问题。 (2)尝试解决方法二: 有人说,通过电脑启动一个热点供手机连接,我选择了360免费WiFi,但瞬间就把笔记本也给弄断网了,尝试了好多次都是笔记本断网收尾,因此这种解决方法最终不了了之。 你期待的结果是什么? 启动服务器之后,能够通过手机设备使用IP地址访问Web服务器

循环列表操作,如何获得最终的操作结果列表?

可能标题描述的不够明确,详细解释如下:我有这样一个循环 var sizeList = [] imgs.forEach((item, index) => { request({ url: item, encoding: null }, (err, res, body) => { let buffer = body sizeList.push(sizeOf(buffer)) console.log(sizeList) }) }) console.log(‘全局’, sizeList) 问题1:console.log(sizeList)会逐渐打印出结果 [ { height: 202, width: 172, type: ‘png’ } ] [ { height: 202, width: 172, type: ‘png’ }, { height: 837, width: 750, type: ‘png’ } ] [ { height: 202, width: 172, type: ‘png’ }, { height: 837, width: 750, type: ‘png’ }, { height: 837, width: 750, type: ‘png’ } ] 请问我如何直接获得最后的一次完整的数组结果,而不要逐次叠加循环的过程?问题2:console.log(‘全局’, sizeList)目前得到的是空数组[]如何使外部console.log(‘全局’, sizeList)获取到循环的最终数组列表呢? 还望得到解答,谢谢! 可能标题描述的不够明确,详细解释如下:我有这样一个循环 var sizeList = [] imgs.forEach((item, index) => { request({ url: item, encoding: null }, (err, res, body) => { let buffer = body sizeList.push(sizeOf(buffer)) console.log(sizeList) }) }) console.log(‘全局’, sizeList) 问题1:console.log(sizeList)会逐渐打印出结果 [ { height: 202, width: 172, type: ‘png’ } ] [ { height: 202, width: 172, type: ‘png’ }, { height: 837, width: 750, type: ‘png’ } ] [ { height: 202, width: 172, type: ‘png’ }, { height: 837, width: 750, type: ‘png’ }, { height: 837, width: 750, type: ‘png’ } ] 请问我如何直接获得最后的一次完整的数组结果,而不要逐次叠加循环的过程?问题2:console.log(‘全局’, sizeList)目前得到的是空数组[]如何使外部console.log(‘全局’, sizeList)获取到循环的最终数组列表呢? 还望得到解答,谢谢!

如何通过关联表进行模糊搜索?

现在只支持 article 表中的 title 和 introduction 字段进行模糊搜索 相关代码 Article.hasMany(models.tag, { foreignKey: ‘article_id’, constraints: false }) Tag.belongsTo(models.article, { foreignKey: ‘article_id’, constraints: false }) const { rows, count } = await ArticleModel.findAndCountAll({ distinct: true, limit: pageSize, offset: (pageNum – 1) * pageSize, order: [[‘id’, ‘DESC’]], attributes: [ ‘id’, ‘title’, ‘author’, ‘cover’, ‘introduction’, ‘created_at’ ], where: { [Op.or]: [ { title: { [Op.like]: `%${wd}%` } }, { introduction: { [Op.like]: `%${wd}%` } }] }, include: [ { model: TagModel, required: false, attributes: [‘name’] }, ] }) 我希望支持 article 表中的 title 和 introduction 字段并且也支持 TagModel 中的name进行模糊搜索即输入关键字,只要文章标题和描述以及文章标签中其中一个符合条件就返回该条数据请问下改怎么解决 现在只支持 article 表中的 title 和 introduction 字段进行模糊搜索 相关代码 Article.hasMany(models.tag, { foreignKey: ‘article_id’, constraints: false }) Tag.belongsTo(models.article, { foreignKey: ‘article_id’, constraints: false }) const { rows, count } = await ArticleModel.findAndCountAll({ distinct: true, limit: pageSize, offset: (pageNum – 1) * pageSize, order: [[‘id’, ‘DESC’]], attributes: [ ‘id’, ‘title’, ‘author’, ‘cover’, ‘introduction’, ‘created_at’ ], where: { [Op.or]: [ { title: { [Op.like]: `%${wd}%` } }, { introduction: { [Op.like]: `%${wd}%` } }] }, include: [ { model: TagModel, required: false, attributes: [‘name’] }, ] }) 我希望支持 article 表中的 title 和 introduction 字段并且也支持 TagModel 中的name进行模糊搜索即输入关键字,只要文章标题和描述以及文章标签中其中一个符合条件就返回该条数据请问下改怎么解决

nodejs有办法获取到调用者的文件地址吗?

比如说我在 /app/packages/util.js const toast = require(‘/app/toast/index’) toast.info() 然后我想在 toast.info 里面获取到 /app/packages/util.js 的路径,有什么方式吗?不要主动传过去 __filename,就在调用者无感知的情况下获取到。 比如说我在 /app/packages/util.js const toast = require(‘/app/toast/index’) toast.info() 然后我想在 toast.info 里面获取到 /app/packages/util.js 的路径,有什么方式吗?不要主动传过去 __filename,就在调用者无感知的情况下获取到。

Nuxt.js设置同一个路由地址根据设备类型渲染不同的pages页面?

默认情况下 Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。 我的目录是这样的:├── pages│ ├── m│ │ ├── index.vue // 移动端 自动生成的路由为 www.xx.com/m│ ├── index.vue // PC端 自动生成的路由为 www.xx.com│ ├── bills.js 我希望: Nuxt.js 同一个路由地址根据是否是移动设备显示m站还是pc站 如: 访问地址www.xx.com。 如果是PC端就使用pages/index.vue组件; 如果设备是移动端,就使用pages/m/index.vue组件。 浏览器端的地址保持不变。 尝试了中间件没成功 默认情况下 Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。 我的目录是这样的:├── pages│ ├── m│ │ ├── index.vue // 移动端 自动生成的路由为 www.xx.com/m│ ├── index.vue // PC端 自动生成的路由为 www.xx.com│ ├── bills.js 我希望: Nuxt.js 同一个路由地址根据是否是移动设备显示m站还是pc站 如: 访问地址www.xx.com。 如果是PC端就使用pages/index.vue组件; 如果设备是移动端,就使用pages/m/index.vue组件。 浏览器端的地址保持不变。 尝试了中间件没成功

cnpm 无响应

今天开机后cnpm 突然无法使用。输入cnpm – 指令,无反应,只是光标一直在闪烁。 在网上看到说是删除.npmrc 文件。删除后问题依旧存在。 删除node 重新安装node -> cnpm 镜像 -> 问题依旧存在。 删除node 重新安装node -> 没有安装cnpm 镜像,输入cnpm 指令依旧是无反应。 图片为最后一次尝试。没有安装cnpm 输入无反应。卸载cnpm 输入cnpm -v 依旧无反应,光标闪烁。 如果没安装cnpm 正常反应应该是‘cnpm 不是内部或外部命令…’这样吧? 今天开机后cnpm 突然无法使用。输入cnpm – 指令,无反应,只是光标一直在闪烁。 在网上看到说是删除.npmrc 文件。删除后问题依旧存在。 删除node 重新安装node -> cnpm 镜像 -> 问题依旧存在。 删除node 重新安装node -> 没有安装cnpm 镜像,输入cnpm 指令依旧是无反应。 图片为最后一次尝试。没有安装cnpm 输入无反应。卸载cnpm 输入cnpm -v 依旧无反应,光标闪烁。 如果没安装cnpm 正常反应应该是‘cnpm 不是内部或外部命令…’这样吧?

vue 和 element 升级之后,之前input 字段没定义的话, 无法输入值

vue 从 2.5.3 升级到 2.6.1element 从 2.4.6 升级到 2.13.1升级之后 之前那input绑定的字段 没有在对象中定义,现在无法输入.项目的内容太多 无法全面覆盖回归.有没有好的方法,统一修改vue 从 2.5.3 升级到 2.6.1element 从 2.4.6 升级到 2.13.1升级之后 之前那input绑定的字段 没有在对象中定义,现在无法输入.项目的内容太多 无法全面覆盖回归.有没有好的方法,统一修改

vue组件中$emit()的作用

求大佬告知这种写法有什么作用吗?为什么在每个方法最后都要写上这个,有什么好处?谢谢!望指点!求大佬告知这种写法有什么作用吗?为什么在每个方法最后都要写上这个,有什么好处?谢谢!望指点!

一个项目设计问题?

有一个项目设计大概是: 有多个动态判断条件,每个条件有两个分支或多个分支,并且可以复合。 后端语言是Java静态语言,有什么方案吗?付费回答也可以,评论@我,我单开提问,感谢了! 有一个项目设计大概是: 有多个动态判断条件,每个条件有两个分支或多个分支,并且可以复合。 后端语言是Java静态语言,有什么方案吗?付费回答也可以,评论@我,我单开提问,感谢了!

lodash 的 cloneBuffer 函数关于 Buffer 深拷贝的疑惑

先张贴下源码: function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice() } const length = buffer.length const result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length) buffer.copy(result) return result } 在源码中,当 isDeep 为 true,即要深拷贝时,使用的是 buffer.slice 方法。 但是关于 slice 方法,文档有如下描述: Returns a new Buffer that references the same memory as the original 链接:https://nodejs.org/docs/latest-v13.x/api/buffer.html#buffer_buf_slice_start_end 也即 slice 所返回的新 Buffer 和原 Buffer 指向的是同一块内存。 在和 TypedArray.slice 的对比中更有如下描述: While TypedArray#slice() creates a copy of part of the TypedArray, Buffer#slice() creates a view over the existing Buffer without copying. 链接:https://nodejs.org/docs/lates… 清楚说明了 slice 是 without copying 的,为什么 lodash会用作深拷贝呢? 先张贴下源码: function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice() } const length = buffer.length const result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length) buffer.copy(result) return result } 在源码中,当 isDeep 为 true,即要深拷贝时,使用的是 buffer.slice 方法。 但是关于 slice 方法,文档有如下描述: Returns a new Buffer that references the same memory as the original 链接:https://nodejs.org/docs/latest-v13.x/api/buffer.html#buffer_buf_slice_start_end 也即 slice 所返回的新 Buffer 和原 Buffer 指向的是同一块内存。 在和 TypedArray.slice 的对比中更有如下描述: While TypedArray#slice() creates a copy of part of the TypedArray, Buffer#slice() creates a view over the existing Buffer without copying. 链接:https://nodejs.org/docs/lates… 清楚说明了 slice 是 without copying 的,为什么 lodash会用作深拷贝呢?

node+koa2配置文件上传成功但是显示的时候报错

报了个这样的错误,响应的数据返回了,下面是我的代码之前觉得可能是路径的问题,返回的字段中url加上了localhost:3000,之后的imgPath是跟url后面拼接的路径是一样的,可以从响应数据图中看出来(上图)这是我在前端(vue)中配置的wangeditor信息尝试过用for of循环遍历一遍还是没用这是目录结构去浏览器访问一下是not found 请问应该怎么解决呢 报了个这样的错误,响应的数据返回了,下面是我的代码之前觉得可能是路径的问题,返回的字段中url加上了localhost:3000,之后的imgPath是跟url后面拼接的路径是一样的,可以从响应数据图中看出来(上图)这是我在前端(vue)中配置的wangeditor信息尝试过用for of循环遍历一遍还是没用这是目录结构去浏览器访问一下是not found 请问应该怎么解决呢

如何用JS写一个微信小游戏SDK技术文档。

由于业务需求,实在想不出如何去写一个S关于微信小游戏的SDK。主要需求是统计创角和登录的在线玩家,获取游戏名称和所在服务器名称,手机系统和型号。当然这些具体需求很麻烦,只是希望有相关经验的大佬能提供一些思路,当然有参考的方案那就更好了,小弟万分感谢!!!由于业务需求,实在想不出如何去写一个S关于微信小游戏的SDK。主要需求是统计创角和登录的在线玩家,获取游戏名称和所在服务器名称,手机系统和型号。当然这些具体需求很麻烦,只是希望有相关经验的大佬能提供一些思路,当然有参考的方案那就更好了,小弟万分感谢!!!

node 使用net模块时Error: getaddrinfo ENOTFOUND localhost

在mac 10.15.3 ,nodev13.6.0,运行net模块时报错server.js文件 //server.js var net = require(‘net’); var server = net.createServer(function(connection) { console.log(‘client connected’); connection.on(‘end’, function() { console.log(‘客户端关闭连接’); }); connection.write(‘Hello World!\r\n’); connection.pipe(connection); }); server.listen(8080, function() { console.log(‘server is listening’); }); 执行以上服务端代码: $ node server.js server is listening # 服务已创建并监听 8080 端口 // client.js var net = require(‘net’); var client = net.connect({port: 8080}, function() { console.log(‘连接到服务器!’); }); client.on(‘data’, function(data) { console.log(data.toString()); client.end(); }); client.on(‘end’, function() { console.log(‘断开与服务器的连接’); }); 执行以上客户端的代码时报如下错误: $ node client.js        events.js:298       throw er; // Unhandled ‘error’ event       ^ Error: getaddrinfo ENOTFOUND localhost     at GetAddrInfoReqWrap.onlookup \[as oncomplete\] (dns.js:64:26) Emitted ‘error’ event on Socket instance at:     at emitErrorNT (internal/streams/destroy.js:84:8)     at processTicksAndRejections (internal/process/task\_queues.js:84:21) {   errno: -3008,   code: ‘ENOTFOUND’,   syscall: ‘getaddrinfo’,   hostname: ‘localhost’ } 没有搜到答案,本地hosts文件配置了localhost 映射 $ sudo cat /etc/hosts   127.0.0.1               localhost 255.255.255.255 broadcasthost ::1                             localhost fe80::1%lo0             localhost 在mac 10.15.3 ,nodev13.6.0,运行net模块时报错server.js文件 //server.js var net = require(‘net’); var server = net.createServer(function(connection) { console.log(‘client connected’); connection.on(‘end’, function() { console.log(‘客户端关闭连接’); }); connection.write(‘Hello World!\r\n’); connection.pipe(connection); }); server.listen(8080, function() { console.log(‘server is listening’); }); 执行以上服务端代码: $ node server.js server is listening # 服务已创建并监听 8080 端口 // client.js var net = require(‘net’); var client = net.connect({port: 8080}, function() { console.log(‘连接到服务器!’); }); client.on(‘data’, function(data) { console.log(data.toString()); client.end(); }); client.on(‘end’, function() { console.log(‘断开与服务器的连接’); }); 执行以上客户端的代码时报如下错误: $ node client.js        events.js:298       throw er; // Unhandled ‘error’ event       ^ Error: getaddrinfo ENOTFOUND localhost     at GetAddrInfoReqWrap.onlookup \[as oncomplete\] (dns.js:64:26) Emitted ‘error’ event on Socket instance at:     at emitErrorNT (internal/streams/destroy.js:84:8)     at processTicksAndRejections (internal/process/task\_queues.js:84:21) {   errno: -3008,   code: ‘ENOTFOUND’,   syscall: ‘getaddrinfo’,   hostname: ‘localhost’ } 没有搜到答案,本地hosts文件配置了localhost 映射 $ sudo cat /etc/hosts   127.0.0.1               localhost 255.255.255.255 broadcasthost ::1                             localhost fe80::1%lo0             localhost

React.memo设置第二个参数后不起作用

今天在学习React的过程中发现了一个问题,我想优化一个子组件让其在props有所改变时才刷新,简化过后代码如下: export default memo<{ content: string }>(props => { console.log(‘TEST’) return <Button>{props.content}</Button> }) 父组件传递给子组件一个string类型,打印输出可以发现子组件在没有改变content时只渲染一次,但是当我使用memo第二个参数时,发现缓存的效果失效了,代码如下: export default memo<{ content: string }>(props => { console.log(‘TEST’) return <Button>{props.content}</Button> }, (prevProps, nextProps) => true) 请问各位老哥这是因为我理解有误还是什么其他原因导致的。 今天在学习React的过程中发现了一个问题,我想优化一个子组件让其在props有所改变时才刷新,简化过后代码如下: export default memo<{ content: string }>(props => { console.log(‘TEST’) return <Button>{props.content}</Button> }) 父组件传递给子组件一个string类型,打印输出可以发现子组件在没有改变content时只渲染一次,但是当我使用memo第二个参数时,发现缓存的效果失效了,代码如下: export default memo<{ content: string }>(props => { console.log(‘TEST’) return <Button>{props.content}</Button> }, (prevProps, nextProps) => true) 请问各位老哥这是因为我理解有误还是什么其他原因导致的。

NodeJs怎么进行脚本性能压力测试?

真是惭愧,这个我是真的不知道,nodejs可以进行脚本的测试吗?是使用nodejs写测试工具,我想测试一个脚本工具。 如果可以,怎么测试呢? 真是惭愧,这个我是真的不知道,nodejs可以进行脚本的测试吗?是使用nodejs写测试工具,我想测试一个脚本工具。 如果可以,怎么测试呢?

Node + redis 如何执行定时任务

在做一个每日热点新闻的功能,每条新闻的浏览量以news_${id}的key形式存在redis中,这时我需要在每天0点取清除所有news_${id}形式的key。应该如何实现呢~在做一个每日热点新闻的功能,每条新闻的浏览量以news_${id}的key形式存在redis中,这时我需要在每天0点取清除所有news_${id}形式的key。应该如何实现呢~

vue中使用$refs出现问题

这是三个聊天框,我在第二个和第三个中点击图片上传的时候,图片始终插入到第一个聊天框中,我写的有什么问题吗这是三个聊天框,我在第二个和第三个中点击图片上传的时候,图片始终插入到第一个聊天框中,我写的有什么问题吗

从后台传过来的图片地址,attr到img上,页面刷新src就没了

Node处理好上传的图片,并把路径保存到mysql中并res.send()给前端,也储存到localStorage中,但是页面刷新img就没了??求大神告知!!! $.ajax({ url: “/picture”, type: “POST”, data: formdata, dataType: “json”, processData: false, // jQuery不要去处理发送的数据 contentType: false, success: function (data) { console.log(data) if (data.code < 0) { $(“span”).text(data.msg) } $(“span”).text(data.msg) localStorage.setItem(“src”, data.urls) var localSrc = localStorage.getItem(“src”) $(‘.imgbox img’).attr(‘src’, localSrc); }, error: function (err) { console.log(“服务器错误!”, err); $(“span”).text(“服务器错误,请重新上传!”) } }) } else { alert(“请选择一张正确的图片并且大小不能大于4M”) } Node处理好上传的图片,并把路径保存到mysql中并res.send()给前端,也储存到localStorage中,但是页面刷新img就没了??求大神告知!!! $.ajax({ url: “/picture”, type: “POST”, data: formdata, dataType: “json”, processData: false, // jQuery不要去处理发送的数据 contentType: false, success: function (data) { console.log(data) if (data.code < 0) { $(“span”).text(data.msg) } $(“span”).text(data.msg) localStorage.setItem(“src”, data.urls) var localSrc = localStorage.getItem(“src”) $(‘.imgbox img’).attr(‘src’, localSrc); }, error: function (err) { console.log(“服务器错误!”, err); $(“span”).text(“服务器错误,请重新上传!”) } }) } else { alert(“请选择一张正确的图片并且大小不能大于4M”) }

以前做项目的时候,使用npm不区分-g和-save -d,现在换了一台电脑,无法运行了

以前做项目的时候,使用npm不区分-g和-save -d,现在换了一台电脑,无法运行了,请问还能怎么补救吗?ide编辑器能否智能的提示我?需要安装哪些包吗?以前做项目的时候,使用npm不区分-g和-save -d,现在换了一台电脑,无法运行了,请问还能怎么补救吗?ide编辑器能否智能的提示我?需要安装哪些包吗?

jwt 的 refresh token怎么使用的才能起到安全作用?

refresh token 要和access tokn 一起 发送吗? 如果一起发送,那还能保证安全吗? 如果不一起发送,如果一个请求 access token 过期,需要客户端重新发送新的access token,那么用户这次请求的数据和已经发出的过期token请求的数据岂不是不能保存? 这样用户体验岂不是很差劲?? refresh token 要和access tokn 一起 发送吗? 如果一起发送,那还能保证安全吗? 如果不一起发送,如果一个请求 access token 过期,需要客户端重新发送新的access token,那么用户这次请求的数据和已经发出的过期token请求的数据岂不是不能保存? 这样用户体验岂不是很差劲??

如何利用websocket统计用户每天在线时长?

一开始思路是通过onOpen和onClose来记录上线和下线时间进行统计。如果上线和下线发生在一天内还比较好统计。如果是用户前一天上线,一直到第二天才下线,第二天又上线一段时间,这样的话,该如何统计?又如用户上线后一直在线好几天,才下线,这样的话,该如何统计“每天”在线时间? PS:不用质疑用户为何会一直在线这麽长时间,其实用户是指智能终端。 一开始思路是通过onOpen和onClose来记录上线和下线时间进行统计。如果上线和下线发生在一天内还比较好统计。如果是用户前一天上线,一直到第二天才下线,第二天又上线一段时间,这样的话,该如何统计?又如用户上线后一直在线好几天,才下线,这样的话,该如何统计“每天”在线时间? PS:不用质疑用户为何会一直在线这麽长时间,其实用户是指智能终端。

如何在java实现js中replace函数第二个参数为匿名函数(替换每个匹配结果为此函数返回值)的特性?

以下代码所示,就是js中replace函数第二个参数可以为匿名函数,并能够在遍历每个匹配的字符时将其作为参数t传入这个匿名函数内。而在java中,第二个参数只能为固定值。那么在java中能实现这种特性吗? ` function k() { var r = new Date().getTime(); var q = “xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx”.replace(/[xy]/g, function(t) { var s = (r + Math.random() * 16) % 16 | 0; r = Math.floor(r / 16); return (t == “x” ? s : (s & 7 | 8)).toString(16) }); return q } ` 以下代码所示,就是js中replace函数第二个参数可以为匿名函数,并能够在遍历每个匹配的字符时将其作为参数t传入这个匿名函数内。而在java中,第二个参数只能为固定值。那么在java中能实现这种特性吗? ` function k() { var r = new Date().getTime(); var q = “xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx”.replace(/[xy]/g, function(t) { var s = (r + Math.random() * 16) % 16 | 0; r = Math.floor(r / 16); return (t == “x” ? s : (s & 7 | 8)).toString(16) }); return q } `

前端监测用户行为

最近产品和我说要统计一下PV和UV,希望在前端能进行检测,点击热点,用户浏览时长,首屏载入时间,用户退出时间,用户访问地址和分布情况。但是我目前没有做个这方面的需求,用JS也没有思绪,是否有什么插件可以帮助我实现需求的呐??最近产品和我说要统计一下PV和UV,希望在前端能进行检测,点击热点,用户浏览时长,首屏载入时间,用户退出时间,用户访问地址和分布情况。但是我目前没有做个这方面的需求,用JS也没有思绪,是否有什么插件可以帮助我实现需求的呐??

graphql 使用GraphQLObjectType定义schema,定义单项数据和列表时ts报错

问题描述 graphql 使用GraphQLObjectType定义schema,定义列表时ts类型检查正常,同时定义单项数据和列表时ts报错 问题出现的环境背景及自己尝试过哪些方法 应该是args字段的问题,尝试都加入id、type字段,不报类型检测错误了,但数据库查不到 相关代码 models/articles.ts import { GraphQLObjectType, GraphQLID, GraphQLString, GraphQLInt, GraphQLNonNull, GraphQLList } from ‘graphql’ import mysql from ‘../../../utils/database’ const ArticleType = new GraphQLObjectType({ name: ‘Article’, fields: { id: { type: GraphQLID }, author: { type: GraphQLString }, title: { type: GraphQLString }, image_url: { type: GraphQLString }, summary: { type: GraphQLString }, content: { type: GraphQLString }, type: { type: GraphQLInt }, sort: { type: GraphQLInt }, tags: { type: GraphQLString }, view_count: { type: GraphQLInt }, created_at: { type: GraphQLString }, updated_at: { type: GraphQLString } } }) //当定义了更具id查询article之后类型检查就报错了 const article = { type: ArticleType, args: { id: { type: new GraphQLNonNull(GraphQLID) } }, resolve: async (_, { id }) => await mysql.Query(` select * from mc_news where id=${id} `) } //当定义了更具id查询article之后类型检查就报错了 const articles = { type: new GraphQLList(ArticleType), args: { type: { type: GraphQLInt }, page: { type: GraphQLInt }, pageSize: { type: GraphQLInt }, }, resolve: async (_, { page = 0, pageSize = 10, type }) => await mysql.Query(` select * from mc_news where type=${type} limit ${((page – 1) < 0 ? 0 : (page – 1)) * pageSize},${pageSize} `) } export { article, articles } schema.ts import { GraphQLSchema, GraphQLObjectType } from ‘graphql’ import { article, articles } from ‘./models/articles’ export default new GraphQLSchema({ query: new GraphQLObjectType({ name: ‘Queries’, fields: { article, articles } }) }) 报错信息: Type ‘{ article: { type: GraphQLObjectType<any, any, { \[key: string\]: any; }>; args: { id: { type: GraphQLScalarType; }; }; resolve: (\_: any, { id }: { id: any; }) => Promise<unknown>; }; articles: { …; }; }’ is not assignable to type ‘Thunk<GraphQLFieldConfigMap<any, any, { id: any; }>>’. Type ‘{ article: { type: GraphQLObjectType<any, any, { \[key: string\]: any; }>; args: { id: { type: GraphQLScalarType; }; }; resolve: (\_: any, { id }: { id: any; }) => Promise<unknown>; }; articles: { …; }; }’ is not assignable to type ‘GraphQLFieldConfigMap<any, any, { id: any; }>’. Property ‘articles’ is incompatible with index signature. Type ‘{ type: GraphQLList<GraphQLType>; args: { type: { type: GraphQLScalarType; }; page: { type: GraphQLScalarType; }; pageSize: { …; }; }; resolve: (\_: any, { page, pageSize, type }: { …; }) => Promise<…>; }’ is not assignable to type ‘GraphQLFieldConfig<any, any, { id: any; }>’. Types of property ‘resolve’ are incompatible. Type ‘(\_: any, { page, pageSize, type }: { page?: number; pageSize?: number; type: any; }) => Promise<unknown>’ is not assignable to type ‘GraphQLFieldResolver<any, any, { id: any; }>’. Types of parameters ‘\_\_1’ and ‘args’ are incompatible. Property ‘type’ is missing in type ‘{ id: any; }’ but required in type ‘{ page?: number; pageSize?: number; type: any; }’. 你期待的结果是什么?实际看到的错误信息又是什么? 希望熟悉graphql以及typescript的大神解释一下为什么报错,以及解决方案。 问题描述 graphql 使用GraphQLObjectType定义schema,定义列表时ts类型检查正常,同时定义单项数据和列表时ts报错 问题出现的环境背景及自己尝试过哪些方法 应该是args字段的问题,尝试都加入id、type字段,不报类型检测错误了,但数据库查不到 相关代码 models/articles.ts import { GraphQLObjectType, GraphQLID, GraphQLString, GraphQLInt, GraphQLNonNull, GraphQLList } from ‘graphql’ import mysql from ‘../../../utils/database’ const ArticleType = new GraphQLObjectType({ name: ‘Article’, fields: { id: { type: GraphQLID }, author: { type: GraphQLString }, title: { type: GraphQLString }, image_url: { type: GraphQLString }, summary: { type: GraphQLString }, content: { type: GraphQLString }, type: { type: GraphQLInt }, sort: { type: GraphQLInt }, tags: { type: GraphQLString }, view_count: { type: GraphQLInt }, created_at: { type: GraphQLString }, updated_at: { type: GraphQLString } } }) //当定义了更具id查询article之后类型检查就报错了 const article = { type: ArticleType, args: { id: { type: new GraphQLNonNull(GraphQLID) } }, resolve: async (_, { id }) => await mysql.Query(` select * from mc_news where id=${id} `) } //当定义了更具id查询article之后类型检查就报错了 const articles = { type: new GraphQLList(ArticleType), args: { type: { type: GraphQLInt }, page: { type: GraphQLInt }, pageSize: { type: GraphQLInt }, }, resolve: async (_, { page = 0, pageSize = 10, type }) => await mysql.Query(` select * from mc_news where type=${type} limit ${((page – 1) < 0 ? 0 : (page – 1)) * pageSize},${pageSize} `) } export { article, articles } schema.ts import { GraphQLSchema, GraphQLObjectType } from ‘graphql’ import { article, articles } from ‘./models/articles’ export default new GraphQLSchema({ query: new GraphQLObjectType({ name: ‘Queries’, fields: { article, articles } }) }) 报错信息: Type ‘{ article: { type: GraphQLObjectType<any, any, { \[key: string\]: any; }>; args: { id: { type: GraphQLScalarType; }; }; resolve: (\_: any, { id }: { id: any; }) => Promise<unknown>; }; articles: { …; }; }’ is not assignable to type ‘Thunk<GraphQLFieldConfigMap<any, any, { id: any; }>>’. Type ‘{ article: { type: GraphQLObjectType<any, any, { \[key: string\]: any; }>; args: { id: { type: GraphQLScalarType; }; }; resolve: (\_: any, { id }: { id: any; }) => Promise<unknown>; }; articles: { …; }; }’ is not assignable to type ‘GraphQLFieldConfigMap<any, any, { id: any; }>’. Property ‘articles’ is incompatible with index signature. Type ‘{ type: GraphQLList<GraphQLType>; args: { type: { type: GraphQLScalarType; }; page: { type: GraphQLScalarType; }; pageSize: { …; }; }; resolve: (\_: any, { page, pageSize, type }: { …; }) => Promise<…>; }’ is not assignable to type ‘GraphQLFieldConfig<any, any, { id: any; }>’. Types of property ‘resolve’ are incompatible. Type ‘(\_: any, { page, pageSize, type }: { page?: number; pageSize?: number; type: any; }) => Promise<unknown>’ is not assignable to type ‘GraphQLFieldResolver<any, any, { id: any; }>’. Types of parameters ‘\_\_1’ and ‘args’ are incompatible. Property ‘type’ is missing in type ‘{ id: any; }’ but required in type ‘{ page?: number; pageSize?: number; type: any; }’. 你期待的结果是什么?实际看到的错误信息又是什么? 希望熟悉graphql以及typescript的大神解释一下为什么报错,以及解决方案。

vue+typescript 引用router上的属性时编辑器报错

rtshims-vue.d.ts文件声明如下: import VueRouter, { Route } from “vue-router”; import Vue from “vue”; declare module “*.vue” { export default Vue; } declare module “vue/types/vue” { interface Vue { $router: VueRouter; $route: Route; } } tsconfig文件如下: { “compilerOptions”: { “target”: “esnext”, “module”: “esnext”, “strict”: true, “jsx”: “preserve”, “importHelpers”: true, “moduleResolution”: “node”, “experimentalDecorators”: true, “esModuleInterop”: true, “allowSyntheticDefaultImports”: true, “sourceMap”: true, “baseUrl”: “.”, “types”: [ “webpack-env” ], “paths”: { “@/*”: [ “src/*” ] }, “lib”: [ “esnext”, “dom”, “dom.iterable”, “scripthost” ] }, “include”: [ “src/**/*.ts”, “src/**/*.tsx”, “src/**/*.vue”, “tests/**/*.ts”, “tests/**/*.tsx” ], “exclude”: [ “node_modules” ] } 在页面中引用$router属性时报错看了网上的解决方案(使用[]替代等)都没解决这个报错,好像是编辑器的错误提示问题,该怎么去掉这个?大神请赐教 rtshims-vue.d.ts文件声明如下: import VueRouter, { Route } from “vue-router”; import Vue from “vue”; declare module “*.vue” { export default Vue; } declare module “vue/types/vue” { interface Vue { $router: VueRouter; $route: Route; } } tsconfig文件如下: { “compilerOptions”: { “target”: “esnext”, “module”: “esnext”, “strict”: true, “jsx”: “preserve”, “importHelpers”: true, “moduleResolution”: “node”, “experimentalDecorators”: true, “esModuleInterop”: true, “allowSyntheticDefaultImports”: true, “sourceMap”: true, “baseUrl”: “.”, “types”: [ “webpack-env” ], “paths”: { “@/*”: [ “src/*” ] }, “lib”: [ “esnext”, “dom”, “dom.iterable”, “scripthost” ] }, “include”: [ “src/**/*.ts”, “src/**/*.tsx”, “src/**/*.vue”, “tests/**/*.ts”, “tests/**/*.tsx” ], “exclude”: [ “node_modules” ] } 在页面中引用$router属性时报错看了网上的解决方案(使用[]替代等)都没解决这个报错,好像是编辑器的错误提示问题,该怎么去掉这个?大神请赐教

webpack打包发生奇怪问题,exec('npm –version')返回很奇怪,第一行地址第二行版本号

正常的exec(‘npm –version’)会返回6.9.0而我的某个项目会返回E:\project\dist\manage>”node” “E:\project\dist\manage\node_modules\.bin\\..\_npm@6.13.4@npm\bin\npm-cli.js” -version6.9.0没错,不知道为什么会返回两行,第一行运行地址,第二行才是版本号,这导致webpack打包检测版本报错。我自己检查发现是某个同事package.json里的dependencies加上了npm的依赖并且我install安装了这个依赖后,运行npm run testing后就会报错。报的就是版本检测错误。原因就是exec(‘npm –version’)返回多余的一行地址。我手动去掉并且卸载了npm依赖后就好了。莫名其妙的问题。有哪位大佬知道原因吗?正常的exec(‘npm –version’)会返回6.9.0而我的某个项目会返回E:\project\dist\manage>”node” “E:\project\dist\manage\node_modules\.bin\\..\_npm@6.13.4@npm\bin\npm-cli.js” -version6.9.0没错,不知道为什么会返回两行,第一行运行地址,第二行才是版本号,这导致webpack打包检测版本报错。我自己检查发现是某个同事package.json里的dependencies加上了npm的依赖并且我install安装了这个依赖后,运行npm run testing后就会报错。报的就是版本检测错误。原因就是exec(‘npm –version’)返回多余的一行地址。我手动去掉并且卸载了npm依赖后就好了。莫名其妙的问题。有哪位大佬知道原因吗?

网站或app后台开发用什么语言好?

我是一个主要做前端的,数据库也会一点,准备搭建一个网站,需要去自学一门后台语言,用于搭建自己网站的后台,也希望能有利于以后的职业发展,我准备在以下语言中选择:node.js、Python、go、php、ts,但一直感觉php的语法很奇怪(可能是js写多了),这五门中,哪门会比较好学,且好维护我是一个主要做前端的,数据库也会一点,准备搭建一个网站,需要去自学一门后台语言,用于搭建自己网站的后台,也希望能有利于以后的职业发展,我准备在以下语言中选择:node.js、Python、go、php、ts,但一直感觉php的语法很奇怪(可能是js写多了),这五门中,哪门会比较好学,且好维护

Ant Design of Vue的Carousel组件,a链接点击无法跳转页面?

Antd Vue的Carousel组件内使用a标签,点击无法跳转,添加@ckick也没有效果,请问如何解决?`<a-carousel autoplay> <div v-for=”item in banner”> <router-link :to=”‘item .linkUrl”> <img :src=”item .logourl” alt=””> </router-link> </div></a-carousel>`可以正常显示a href和链接,但是点击不能跳转。 Antd Vue的Carousel组件内使用a标签,点击无法跳转,添加@ckick也没有效果,请问如何解决?`<a-carousel autoplay> <div v-for=”item in banner”> <router-link :to=”‘item .linkUrl”> <img :src=”item .logourl” alt=””> </router-link> </div></a-carousel>`可以正常显示a href和链接,但是点击不能跳转。

求nutx.js 整合tinymce富文本编辑器的教程

前端新手,公司使用nutx.js框架要使用tinymce富文本编辑器,网上的都是vue整合tinymce,没有nutx.js的,按照vue的版本改一直报错: 有没有大佬提供一份在nuxt.js上整合tinymce的教程 前端新手,公司使用nutx.js框架要使用tinymce富文本编辑器,网上的都是vue整合tinymce,没有nutx.js的,按照vue的版本改一直报错: 有没有大佬提供一份在nuxt.js上整合tinymce的教程