
nodejs
亮子AI
全干程序员
展开
-
【PostgreSQL】Ubuntu 下使用 Prisma 的初始化流程
完成上面准备工作就ok了,不需要手工创建数据库,因为下面将由 Prisma 来创建数据库。整个数据库创建工作就完成了。原创 2024-01-17 23:15:00 · 771 阅读 · 0 评论 -
【node.js】怎样在MacOS上安装 node, npm?
运行安装器,按照提示点击按钮,一步一步完成安装。上下载安装器(.pkg installer)。原创 2022-11-16 10:21:25 · 1048 阅读 · 0 评论 -
【Node.js】Express中输出HTML,但是不包含layout
使用模板的时候,传入参数 layout: false,就可以不使用layout:原创 2022-07-09 12:19:55 · 267 阅读 · 0 评论 -
【TypeScript】Argument of type ‘Buffer‘ is not assignable to parameter of type ‘string‘.
当使用 fs.readFileSync 读取json文件,然后用 JSON.parse() 时,出现上述错误。正确的方法是加上 utf-8 参数:原创 2022-06-14 07:18:36 · 1406 阅读 · 0 评论 -
JWT 的退出登录方法
JWT 登录之后,服务器发放 token。在到期时间之前,token 一直有效,那么如何才能实现用户登出(让 token 失效)?黑名单校验凡是退出登录的token都放入黑名单中,定期清理。每次用户请求服务器都校验token是否在黑名单版本号校验访问时从token中取出版本号和用户id 和 redis中存储 用户id和版本号 做对比,不一致则不给访问。用户登出的时候在redis中把用户版本号加一。过期时间校验登录时token附带创建时间。访问时校验redis存储的过期时间,如果创建时间大于过原创 2020-10-29 00:14:29 · 11028 阅读 · 6 评论 -
【TypeScript】怎样使用环境变量包dotenv?
首先安装:npm i dotenvnpm i -D @types/dotenv创建.env文件,写入环境变量PORT=3011使用环境变量:import 'dotenv/config';const port = process.env.PORT原创 2022-05-08 15:38:18 · 2319 阅读 · 2 评论 -
【nest.js】怎样开启跨域访问 CORS?
在Express中,使用cors模块来实现跨域访问:var express = require('express')var cors = require('cors')var app = express()app.use(cors())在 Nest.js 中,可以使用 app.enableCors() 来启用cors:const app = await NestFactory.create(AppModule);app.enableCors();await app.listen(3000原创 2022-05-06 21:27:22 · 4182 阅读 · 0 评论 -
【ORM】TypeORM 与 Prisma 的详细对比
这是一篇比较详尽的对比:Prisma vs. TypeORM结论:目前TypeORM更流行,但是未来Prisma更有希望胜出,因为它有资本支持,有全职开发团队。原创 2022-05-03 11:30:55 · 3266 阅读 · 0 评论 -
【TypeScript】怎样在Node.js中使用全局变量global?
如果直接使用 global.MYVAR,TS会报错,因此你需要增加类型定义,让TS能够识别。你可以创建一个文件 src/types/global.d.ts,内容如下:declare global { var MYVAR: string}export {}然后在 tsconfig.json 文件中确认有下面的命令:"include" : [ "src/**/*"]这样就可以愉快地使用 global.MYVAR 了。...原创 2022-04-22 13:30:37 · 4441 阅读 · 0 评论 -
【JavaScript】迅速确定url是网址
如果只是需要判断url开头是不是http或https,则不要用正则表达式,直接字符串匹配是最迅速的:if (urlString.indexOf('http://') === 0 || urlString.indexOf('https://') === 0)原创 2022-03-05 16:44:16 · 846 阅读 · 0 评论 -
【JavaScript】forEach中无法使用await/async
forEach循环会产生多个同步调用,就算你在forEach中使用了await,forEach也不会等待调用结束,forEach之后的语句会立即执行。因此,如果你要在循环中使用 await,还是得使用for … of 结构,例如:async function printFiles () { const files = await getFilePaths(); for (const file of files) { const contents = await fs.readFile(原创 2022-02-25 01:01:00 · 1897 阅读 · 0 评论 -
【Javascript】无用的技巧:使用变量调用与变量值同名的函数
花了一个小时,查找、测试将变量值转换成函数来使用的方法。Javascriptwindow["functionName"](arguments);Node.jsvar x = {};x.f1 = function(){ console.log('Call me as a string!');}然后调用:var funcstr = "f1";x[funcstr]();结论上述方法并没有减少代码量,也并不清晰,所以清晰且直观的方法还是使用 if:if (funcName =原创 2021-09-26 16:36:59 · 274 阅读 · 0 评论 -
【node.js】你再也不需要 body-parser 了
当我们用 Express 做一个可以接收 POST 请求的应用时,肯定会用到 body-parser,使用过程通常是这样的:第一步,安装模块:npm install body-parser第二步:使用const express = require('express');const bodyParser = require('body-parser');const app = express();app.use(bodyParser.json());Express 4.16.0 已经内置原创 2021-06-06 09:51:31 · 1668 阅读 · 0 评论 -
pm2 如何使用 ES6?
使用 ES6 语法,pm2 启动应用的时候会报错,解决办法是使用 babel-node 来启动应用,具体操作:安装 babelnpm i -D babel-preset-envnpm i -D babel-plugin-transform-runtime并创建 .babelrc 文件:{ "plugins": [ ["transform-runtime", { "regenerator": true }] ], "p原创 2021-06-05 16:13:09 · 334 阅读 · 0 评论 -
node 安装 pg 出现 gyp 错误的解决办法
花了3+个小时解决的问题,记录一下。我在 Ubuntu 18.04 上安装 npm install pg 时,出现错误:......gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1gyp ERR! stack at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:431:16)gyp ERR! stack原创 2021-06-05 07:49:21 · 3199 阅读 · 0 评论 -
npm 安装 bcrypt 出现 gyp 错误的解决办法
bcrypt 需要系统有 gyp 插件支持,简单的解决办法是使用 bcryptjs,它的接口与 bcrypt 是完全一样的,只是它的实现是纯 JS,不依赖其他插件:npm i bcryptjs原创 2021-05-15 15:26:30 · 454 阅读 · 0 评论 -
Javascript - 三个点(...)是什么操作运算?
对象/数组扩展运算符它可以把对象或数组进行扩展。举例一:展开对象const adrian = { fullName: 'Adrian Oprea', occupation: 'Software developer', age: 31, website: 'https://oprea.rocks'};const bill = { ...adrian, fullName: 'Bill Gates', website: 'https://micr原创 2021-05-02 15:51:00 · 1139 阅读 · 0 评论 -
Puppeteer没有自动安装Chromium的解决办法
按照官方文档的说法,安装 Puppeteer 时会自动安装 Chromium 浏览器。但是实际安装过程中,会出现不安装 Chromium 的情况,这时需要使用下面的命令来手动安装 Chromium:node node_modules/puppeteer/install.js这样就能把 Chromium 正确的安装到 node_modules/puppeteer/.local-chromium 目录下。根据操作系统及浏览器版本的不同,浏览器大概占用 200M~400M 的磁盘空间。...原创 2021-04-11 09:08:32 · 11062 阅读 · 0 评论 -
使用 Babel 转换 ES6 代码为 ES5
为什么要把 ES6 转成 ES5 代码?简单答案就是:为了浏览器兼容,以及为了在 node.js 环境可以顺畅运行应用程序。老的浏览器不支持 ES6 语法,因此需要转成兼容性更好的 ES5。在 node.js 环境中,node 对 ES6 的支持一直被诟病,到了 13 版本之后,才出了模块模式(在 package.json 中增加一句:“type”: “module”),但有些库仍然不支持 ES6 语法。因此,如果你的 node.js 程序遇到不认识 ES6 语法的时候,请使用 Babel 转码一下也原创 2021-03-29 21:44:44 · 1385 阅读 · 1 评论 -
Node.js 连接 PostgreSQL 的奇怪问题:query 不会返回!
这个问题花了我6个小时!无论是使用回调函数、还是使用 Promise,query 死活没反应。数据库连接正常,新建一个项目来使用数据库也是正常。最后发现是版本问题,升级 pg(node-postgresql)到 8.2.0 版本就解决了!结论:在使用 Node 14 时,要升级 pg 到 8.0 以上!参考:https://github.com/brianc/node-postgres/issues/2069#issuecomment-619456031...原创 2021-02-12 19:03:37 · 473 阅读 · 0 评论 -
node.js 接收 POST 数据错误:Error: request entity too large
增加接收数据的大小方法是:app.use(express.json({limit: '50mb'}));app.use(express.urlencoded({limit: '50mb'}));https://stackoverflow.com/a/19965089/3054511原创 2021-02-09 20:46:36 · 404 阅读 · 0 评论 -
node.js 中怎样解决 UnhandledPromiseRejectionWarning 错误?
在 node.js 运行中,当遇到 UnhandledPromiseRejectionWarning 错误或警告时,该如何解决呢?错误提示有时候是这样的:(node:6603) UnhandledPromiseRejectionWarning: Error: Protocol error (Runtime.callFunctionOn): Object reference chain is too long有时候是这样的:(node:6603) UnhandledPromiseRejection原创 2021-01-31 17:11:47 · 27489 阅读 · 2 评论 -
使用 node.js 创建命令行子命令 Hello World
使用 commander 库来创建命令行工具很方便,commander 在 github 上有将近两万 star,是一个流行的 node.js 库。想想 git 命令包括众多的子命令:git add, git commit, git push, 等等。你也可以创建像 git 一样的一组命令行工具。使用 commander 来创建具有子命令的一组命令很方便,子命令是一个单独的 js 文件,默认文件名:[主命令]-[子命令].js创建过程创建一个目录,并初始化:mkdir subcmdcd su原创 2021-01-30 21:13:38 · 299 阅读 · 0 评论 -
node.js 微信公众号验证URL实例
微信公众号验证URL地址及签名,官方有实例代码,写得啰嗦:const crypto = require('crypto');const url = require('url');exports.wechat = (req,res) => { var query = url.parse(req.url, true).query; var signature = query.signature; var timestamp = query.timestamp; var nonce原创 2021-01-19 07:26:19 · 435 阅读 · 2 评论 -
ES6,Typescripts,如何正确import express?
使用Typescripts,在导入模块时,常常出一些难以理解的简单错误。下面就给出标准答案,让你在 import 模块的时候不再迷惑。1. 标准做法import { Request, Response, Application } from 'express';import express = require('express');var app: Application = express();app.get('/', function (req: Request, res: Respons原创 2020-11-26 16:13:21 · 2551 阅读 · 0 评论 -
[node.js] Promise中,resolve, reject 之后需不需要 return?
答案是,需要。为了阻止后面的代码被执行,应当加上 return,或者直接使用:return resolve(...)详细解释:https://stackoverflow.com/a/32536083/3054511原创 2020-11-21 11:39:00 · 2825 阅读 · 0 评论 -
MySQL 转换1,0为 true,false
Mysql的基本数据类型中并没有布尔型,之所以建表和数据操作中能够使用BOOLEAN是因为mysql将其作为了tinyint(1)的别名。用0表示false,1表示true。但开发过程中,既然我们给某一字段定义为布尔型,那么在我们获取数据后,期望得到的必然是布尔值而不是0或1。因此我们可以在得到返回值后转换一下。这里我使用的是mysql模块,该模块允许给typeCase属性设置一个回调函数。详见官网说明 https://github.com/mysqljs/mysql#stringconnection原创 2020-10-30 00:08:56 · 9321 阅读 · 0 评论 -
Node.js 中联合使用两个日志包:Morgan, Winston
代码:var logger = new winston.Logger({ transports: [ new winston.transports.File({ level: 'info', filename: './logs/all-logs.log', handleExceptions: true...原创 2020-03-08 18:08:57 · 826 阅读 · 0 评论 -
PostgreSQL 如何写条件:值在数组中、值不在数组中
值在数组中:SELECT COUNT(*) FROM "messages" WHERE 3 = ANY (recipient_ids)值不在数组中SELECT COUNT(*) FROM "messages" WHERE NOT (3 = ANY (recipient_ids))如果你用的是 node.js 的 pg 包,值在数组中可以这样写:var ids = [1,3,4]; ...原创 2020-03-06 20:42:05 · 8912 阅读 · 0 评论 -
怎样在 Ubuntu 18.04 上安装 yarn,以及 yarn 常用命令有哪些?
Node 的包依赖管理工具,从速度和版本控制方面来看,yarn 比 npm 有优势,因此建议用 yarn 来代替 npm。在 Ubuntu 系统上要安装 yarn,首先增加源:curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -echo "deb https://dl.yarnpkg.com/debian...原创 2020-01-27 17:00:40 · 1905 阅读 · 0 评论 -
JS中有效判断一个值是否是 null 或 undefined
上代码: if ( some_variable == null ){ // some_variable is either null or undefined }更多代码:if ( !some_variable ) { // some_variable is either null, undefined, 0, NaN, false, or an empty string}...原创 2019-12-29 09:30:12 · 2229 阅读 · 0 评论 -
Javascript,参数的参数:以函数名作为参数,怎么穿参数给这个函数?
第一个方法:匿名函数function foo(x) { alert(x);}function bar(func) { func();}//alerts "Hello World!" (from within bar AFTER being passed)bar(function(){ foo("Hello World!") });第二个方式:使用 applyfunc...原创 2019-11-25 14:40:14 · 633 阅读 · 0 评论 -
node.js 上传文件比较 busboy vs. formidable vs. multer vs. multiparty
Multer 最流行,更新及时。formidable 下载量最大,更新迟缓。详细比较在这里:https://npmcompare.com/compare/busboy,formidable,multer,multiparty原创 2019-11-16 09:25:20 · 1203 阅读 · 0 评论 -
用 nodejs 写命令行工具
npm 不仅可以管理 nodejs 的依赖关系,它还可以用来打包和分发命令行工具!创建一个新的 npm 项目:$ npm init给应用起一个名字:ser,其他输入项都直接回车,用默认内容。最后,创建了文件 package.json:{ "name": "ser", "vers原创 2018-11-19 23:47:30 · 1594 阅读 · 1 评论 -
MySQL 查询中,如何做到大小写敏感?
默认是大小写不敏感。请在条件语句中加上 BINARY:SELECT * FROM `table` WHERE BINARY `column` = 'value'这个答案获得了很多人赞同,还有人质问:这正是我想要的答案,为什么这个回答没被选为正确答案?https://stackoverflow.com/a/5629121...原创 2018-10-27 22:06:14 · 293 阅读 · 0 评论 -
Express (version>=4.16.0) 怎样获取 post 的参数值?
直接上代码:const express = require("express")const bodyParser = require("body-parser")const app = express()app.use(bodyParser.json())app.use(bodyParser.urlencoded({ extended: true}))app.use(expre...原创 2018-10-27 21:24:42 · 691 阅读 · 0 评论 -
怎样查看 nodejs 安装包的版本信息?
查看当前路径的安装包:npm list查看全局的安装包:npm list -g查看某个安装包:$ npm list gruntprojectName@projectVersion /path/to/project/folder└── grunt@0.4.1或者:$ npm list | grep grunt└── grunt@0.4.1...原创 2018-10-27 20:58:57 · 9246 阅读 · 0 评论 -
nodejs 文件操作
使用 fs 模块var fs = require('fs');读取并返回 HTML 文件内容:var http = require('http');var fs = require('fs');http.createServer(function (req, res) { fs.readFile('demofile1.html', function(err, data) { ...原创 2018-10-27 10:26:20 · 494 阅读 · 0 评论 -
Express 的中间件
中间件是 Express 强大的功能,它的处理流程示意图如下:下面是一个演示例子:const app = express()app.use((request, response, next) => { console.log(request.headers) next()})app.use((request, response, next) => { req...原创 2018-10-21 14:04:41 · 989 阅读 · 0 评论 -
Javascript 判断 timeout 是否已经结束
第一个例子,创建包裹函数:function Timeout(fn, interval) { var id = setTimeout(fn, interval); this.cleared = false; this.clear = function () { this.cleared = true; clearTimeout(id); ...原创 2018-10-28 07:33:41 · 3827 阅读 · 0 评论