小编Suj*_*ari的帖子

错误:监听 EACCES:权限被拒绝 0.0.0.0:3001

我在这里查看了很多答案,但没有一个解决了我的错误。这是我到目前为止所尝试过的。

环境:

win 10 pro v2004 build 19041.29

node v12.14.1
Run Code Online (Sandbox Code Playgroud)
  1. 用于netstat -a -b查看此端口是否正在被任何其他进程使用。没有进程正在使用此端口,也尝试切换端口以3000得到相同的错误。

  2. 我使用docker-desktop和wsl2,所以也一一禁用了所有虚拟网络适配器。杀死所有其他 docker 服务后尝试。

  3. 重新启动了我的电脑。

  4. npm start尝试以管理员身份通过 powershell运行

服务器.js

const app = require('./src/app');

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Litening on port ${port}...`);
});
Run Code Online (Sandbox Code Playgroud)

错误:

events.js:200
      throw er; // Unhandled 'error' event
      ^

Error: listen EACCES: permission denied 0.0.0.0:3001
    at Server.setupListenHandle [as _listen2] (net.js:1289:21)
    at listenInCluster (net.js:1354:12)
    at Server.listen (net.js:1442:7)
    at Function.listen (C:\Users\sujeet\project\node_modules\express\lib\application.js:618:24)
    at Object.<anonymous> (C:\Users\sujee\CustomerAPIs\server.js:4:5)
    at Module._compile (internal/modules/cjs/loader.js:955:30) …
Run Code Online (Sandbox Code Playgroud)

windows networking node.js

14
推荐指数
1
解决办法
1万
查看次数

捕获 express.json() 中间件抛出的错误 json 格式的错误

SyntaxError: Unexpected string in JSON at position 59当 json 数据的格式无效时,我收到html 格式的错误。我不知道为什么它给我 html 而不是错误对象。
我已经设置了我的标题如下。


//header middlewares
app.use((req, res, next) => {
    res.setHeader('Content-Type', 'application/json');
    res.setHeader("Access-Control-Allow-Origin", "*");
    next();
  });
Run Code Online (Sandbox Code Playgroud)

我想捕获错误并以以下格式发送消息。

{ 
  "status":404,
  "message":Unexpected string in JSON at position 59
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>SyntaxError: Unexpected string in JSON at position 59<br> &nbsp; &nbsp;at JSON.parse (&lt;anonymous&gt;)<br> &nbsp; &nbsp;at parse (C:\Users\mydirectory\auth\node_modules\body-parser\lib\types\json.js: 89: 19)<br> &nbsp; &nbsp;at C:\Users\mydirectory\auth\node_modules\body-parser\lib\read.js: 121: 18<br> &nbsp; &nbsp;at invokeCallback (C:\Users\mydirectory\auth\node_modules\raw-body\index.js: 224: 16)<br> &nbsp; …
Run Code Online (Sandbox Code Playgroud)

node.js express

8
推荐指数
1
解决办法
3398
查看次数

React.createRef() 实际上是如何工作的?

我浏览了 React Refs 的 React 文档,这就是它所说的createRef()

createRef() 接收底层 DOM 元素作为其当前属性。当 ref 属性用于自定义类组件时, ref 对象接收组件的已安装实例作为其当前 .

我对此有一些疑问。首先看看下面的组件。

import React, { Component } from "react";

class ImageCard extends Component {
  constructor(props) {
    super(props);
    this.imageRef = React.createRef();
    console.log("Called in constructor", this.imageRef);
  }

  componentDidMount() {
    console.log("Called when component did mount ", this.imageRef);
  }

  render() {
    const { description, urls } = this.props.image;
    return (
      <div>
        <img ref={this.imageRef} src={urls.regular} alt={description} />
      </div>
    );
  }
}

export default ImageCard;
Run Code Online (Sandbox Code Playgroud)

因此,在构造函数中,我创建了一个React Ref,并分配给了一个名为 …

javascript reactjs

7
推荐指数
2
解决办法
3574
查看次数

按具有条件和自定义键的对象数组分组

我有以下对象数组,

[{

    a: 1,
    created_on: '2021-04-23 10:00:01',
}, {
    b: 1,
    created_on: '2021-04-24 09:03:01',
}, {
    b: 1,
    created_on: '2021-04-24 13:03:01',
}]
Run Code Online (Sandbox Code Playgroud)

首先,我需要使用忽略时间的日期分组。

所以,

{
 "2021-04-23": [{
    a: 1,
    created_on: '2021-04-23 10:00:01',
  }],
....
}
Run Code Online (Sandbox Code Playgroud)

如果是类似的日期created_on: '2021-04-23',我可以使用lodash/groupBy.

我仍然可以使用它,但现在它涉及一些应用条件来将它们转换created_on为日期格式。

此外,我还需要按每个按日期结果分组的那些分组,以便它们created_on落在一个时间间隔内。

"SALES_SLOTS": [
    {
      "slot": "00:00-04:00"
    },
    {
      "slot": "04:00-08:00"
    }, 
    {
      "slot":"08:00-12:00"
    }, 
    {
      "slot":"12:00-16:00"
    },
    {
      "slot":"16:00-20:00"
    },
    {
      "slot":"20:00-24:00"
    }
  ],
Run Code Online (Sandbox Code Playgroud)

所以,如果created_on: '2021-04-23 10:00:01',它应该进入组,

{
  "08:00-12:00": [{
     a: 1, …
Run Code Online (Sandbox Code Playgroud)

javascript lodash

6
推荐指数
1
解决办法
424
查看次数

带有 async 的 map() 与 Promise.all()

如果我有一个元素数组并且我想对它们进行并行操作。

我会用promise.all().

我知道promise.all()接受一系列的承诺。如果我错了请纠正我,我不这么认为。

这里,说得很清楚了。

Promise.all() 方法返回单个 Promise,当作为可迭代对象传递的所有 Promise 都已实现时,或者当可迭代对象不包含 Promise 时,或者当可迭代对象包含已实现的 Promise 和已返回的非 Promise 时,该 Promise 会被实现。 。它会因为第一个被拒绝的 Promise 的原因而拒绝,或者如果第一个参数使用 try/catch/throw 块捕获了其中的错误,则使用第一个参数捕获的错误。

所以,是的,我们可以将简单的函数传递给promise.all(),如果它们返回,它就会解析,如果它们抛出错误,它就会拒绝。

现在看下面的代码。

const promises = todayAssignedJobs.map(async todayAssigned => {
  const [leaderboard, created] = await Leaderboard.findOrCreate({...});

  if (!created) {
    const rating = (todayAssigned.rating + leaderboard.rating * leaderboard.jobs_completed) / (leaderboard.jobs_completed + 1);
    const commission = todayAssigned.commission + leaderboard.commission;
    const jobsCompleted = leaderboard.jobs_completed + 1;

    await Leaderboard.update({
      rating,
      commission,
      jobs_completed: jobsCompleted,
      updated_by: 'system',
    }, …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js promise

5
推荐指数
1
解决办法
8034
查看次数

Express 中间件:仅允许管理员或主持人访问

我希望路由只能由版主或管理员访问。我尝试在路线上应用数组中间件。但是,如果一个中间件无法申请,它只会拒绝访问。

所以,假设我是管理员或版主,我可以访问/store-detail.

但在这里,如果我是管理员,我无法访问它,因为它也会检查主持人。

这里两个中间件admin和 都moderator被应用。

我希望它适用adminmoderator.
我怎样才能只应用其中之一?
这样只有管理员或版主才能访问它。
verify中间件是验证jwt token。
路由器

router.post('/store-detail', [verify, admin, moderator], async (req, res) => {
    //validate data
}}
Run Code Online (Sandbox Code Playgroud)

中间件

const User = require('../models').User

module.exports = async function (req, res, next) { 
    // 401 Unauthorized
    const user = await User.findOne({ where: { id : req.user.id}})
    if(user.role !== 'moderator') return res.status(403).send({error: { status:403, message:'Access denied.'}});
    next();
  }
Run Code Online (Sandbox Code Playgroud)
const User = require('../models').User

module.exports = async function …
Run Code Online (Sandbox Code Playgroud)

node.js express

4
推荐指数
1
解决办法
3807
查看次数

在烧瓶中处理 Ajax 请求

我一直在学习烧瓶。我还在其中创建了两个项目。这是我的第三个项目。我总是被困在这一点上。我想让服务器端代码在页面上发生事件时运行,比如单击按钮。

在链接的图像中。我希望在单击“删除”按钮时删除该条目。我已经将数据保存在 mysql 服务器上,所以我也希望将其从那里删除

这是我所做的。我创建了一条路线/delete_student,它处理删除学生。但问题是它总是重新加载页面,并且它切换到不同的 url。我不希望它们中的任何一个发生。我该怎么办?我应该使用 Ajax,如果是,请告诉我,如何使用?

HTML

{% for i in data %}
            <tr>
                <td>{{i['roll_no']}}</td>
                <td>{{i['name']}}</td>
                <td>{{i['username']}}</td>
                <td>{{i['password']}}</td>
                <td><a href="#">Edit</a></td>
                <td><a href="{{url_for('delete_student')}}">Delete</a></td>
            </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

烧瓶

@app.route('/delete_student')
@is_logged_in
def delete_student():
if session['username']=='nitti':
    cur = mysql.connection.cursor()
    #pop the row from the table?
    #how to identify the row being deleted?
    return render_template(url_for('student_summary'))
Run Code Online (Sandbox Code Playgroud)

flask flask-sqlalchemy

3
推荐指数
1
解决办法
1万
查看次数

验证负数到正数范围内的数字 Joi

我正在尝试通过 Joi 验证纬度和经度。

允许的纬度数字范围是-90 to +90
允许的经度数字范围是-180 to +180

const schema = Joi.object({
    map_lat: Joi.number()
      .min(-90)
      .max(90)
      .messages({ 'number.base': "Invalid latitude!" }),
    map_lng: Joi.number()
      .min(-180)
      .max(180)
      .messages({ 'number.base': "Invalid longitude!" }),
  })
Run Code Online (Sandbox Code Playgroud)

我遇到以下错误。

错误:限制必须是正整数或引用

我也尝试过:

map_lng: Joi.number()
    .positive()
    .negative()
    .min(-90)
    .max(90)
Run Code Online (Sandbox Code Playgroud)

但仍然遇到同样的错误。
任何人都可以帮助我如何验证 -ve 到 +ve 范围值?

javascript node.js joi

3
推荐指数
1
解决办法
4582
查看次数

preg_replace() 如何理解 $replacement 参数中的 '${1}1,$3' ?

我很难理解 preg_replace()。
这就是我到目前为止所得到的。 preg_replace($patter, $replacement, $string)
但是,当有捕获组替换时,它让我感到困惑。但我还是明白了一些。像下面这样

preg_replace('/(\w+)/', 'hello', 'say hello!')
我知道这会导致“你好你好!”。我可以通过捕获组做更多事情。 preg_replace('/(\w+)/','\1 Hello', 'Say World!',1)

这将导致“向世界说你好”。

这是我不明白的。

<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
Output:
April1,2003
Run Code Online (Sandbox Code Playgroud)

什么${1}1,$3意思?

使用$1 \1<\1>${1}1意味着什么?

php regex pcre

2
推荐指数
1
解决办法
816
查看次数

将一个大整数编码为 base62

我需要创建独特的推荐代码。为了使每个推荐代码都独一无二,我正在尝试执行如下操作。

const stringVal = `${currentTimestamp}${someVal}${someKey}`
Run Code Online (Sandbox Code Playgroud)

这里someVal本身是 BigInt mysql 数据类型,并且someKey始终是两位数。

为了编码,我使用base62包。

每当我通过someVal超过 99 分时,我就会开始得到意想不到的结果。

function generateReferralCode(someVal) {
   const currentTimestamp = Date.now()
   let someKey = getSomeKey(someVal)
   const val = `${currentTimestamp}${someVal}${someKey}`
   console.log(`number to string : ${val}`)
   console.log(`longed value from string : ${Long.fromString(val)}`)
   const encodedVal = await base62.encode(Long.fromString(val))
   return encodedVal
}
function parseReferralCode(referralCode) {
    const decodedVal = base62.decode(referralCode)
    console.log(`decoded number : ${decodedVal}`)
    //extract someValue
    let  somevalue = parseInt(decodedVal / 100) % ( Math.pow(10, (decodedVal % …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

2
推荐指数
1
解决办法
1555
查看次数