小编Kan*_*naj的帖子

使用UNION时无法识别json []类型的等号运算符

我正在尝试使用UNION规则在单个表上执行多个查询

我有两张桌子:

  • 项目(id,name,pinned BOOLEAN)
  • 技能(m2m到项目)

我希望首先得到一组pinned设置为的行,true并用最新的条目填充剩余的(pinned设置为false)

SELECT
  project.id AS project_id,
  project.name AS project_name,
  array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.pinned = true
GROUP BY project_id,project_name

UNION

SELECT
  project.id AS project_id,
  project.name AS project_name,
  array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.id != 1 AND project.pinned = false
GROUP BY project_id,project_name
ORDER …
Run Code Online (Sandbox Code Playgroud)

postgresql union json

27
推荐指数
2
解决办法
2万
查看次数

我如何在docker中备份数据库

我使用docker-compose和下面的yml文件运行我的应用程序

  postgres:
    container_name: postgres
    image: postgres:${POSTGRES_VERSION}
    volumes:
      - postgresdata:/var/lib/postgresql/data
    expose:
      - "5432"
    environment:
      - POSTGRES_DB=42EXP
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

  node:
    container_name: node
    links:
      - postgres:postgres
    depends_on:
      - postgres

volumes:
  postgresdata:
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的,我正在使用a named volume来管理postgres状态.

根据官方文档,我可以备份如下的卷

docker run --rm --volumes postgresdata:/var/lib/postgresql/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
Run Code Online (Sandbox Code Playgroud)

其他一些教程建议我使用pg-dumppostgres提供的功能进行备份.

pg_dump -Fc database_name_here > database.bak
Run Code Online (Sandbox Code Playgroud)

我想我必须进入postgres容器才能执行此功能并将备份目录挂载到主机.

一种方法比另一种更好/更好吗?

postgresql docker

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

如何正确处理 docker 中的 .env 文件

我有一个节点应用程序dotenv用于跟踪环境变量。它使用.env根文件夹中的文件在运行时获取变量。问题是当我使用 docker 构建节点图像时,下面的行.env也会复制构建文件

FROM node:latest

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)

如果我从 dockerhub 构建和拉取图像。该文件已包含.env我在开发中使用的文件。理想情况下,我想.env为生产指定一个不同的文件。(也许在生产服务器中手动创建一个新的 .env 文件)

我尝试.env在 dockerignore 中指定文件。但 lineCOPY . /usr/src/app似乎仍然复制了 env 文件。

我不需要这样使用dotenv。我试着像下面那样指定它

version: '2'

services:
  node:
    container_name: node
    build: .
    env_file: .env
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    command: …
Run Code Online (Sandbox Code Playgroud)

node.js docker

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

在 docker 应用程序中启用 webpack 热重载

我有一个带有以下容器的 docker 应用程序

  1. node - 项目的源代码。它提供位于公共文件夹中的 html 页面。
  2. webpack - 监视节点容器中的文件,并在代码发生更改时更新公共文件夹(来自节点容器)。
  3. 数据库

这是 webpack/node 容器设置

 web:
    container_name: web
    build: .
    env_file: .env
    volumes:
      - .:/usr/src/app
      - node_modules:/usr/src/app/node_modules
    command: npm start
    environment:
      - NODE_ENV=development
    ports:
      - "8000:8000"

  webpack:
    container_name: webpack
    build: ./webpack/
    depends_on:
      - web
    volumes_from:
      - web
    working_dir: /usr/src/app
    command: webpack --watch
Run Code Online (Sandbox Code Playgroud)

所以目前,webpack 容器会监控和更新 public 文件夹。我必须手动刷新浏览器才能看到我的更改。

我现在正在尝试合并 webpack-dev-server 以在浏览器中启用自动刷新

这些是我对 webpack 配置文件的更改

module.exports = {
  entry:[
    'webpack/hot/dev-server',
    'webpack-dev-server/client?http://localhost:8080',
    './client/index.js'
  ],

  ....

  devServer:{
    hot: true,
    proxy: {
      '*': 'http://localhost:8000'
    }
  } …
Run Code Online (Sandbox Code Playgroud)

node.js docker webpack webpack-dev-server webpack-2

12
推荐指数
4
解决办法
2万
查看次数

确保服务器应用程序在mocha测试开始之前运行

这类似于每个Mocha测试之前运行的Ensuring Express App,但指定的解决方案仍然无法工作+我正在使用websocket服务器

简而言之,我正在使用一个名为socketcluster的websocket框架,这是我的服务器文件

import {SocketCluster} from 'socketcluster';

const socketCluster = new SocketCluster({
  workers:1,
  brokers:1,
  port: 3000,
  appName:null,
  initController: __dirname + '/init.js',
  workerController: __dirname + '/worker.js',
  brokerController: __dirname + '/broker.js',
  socketChannelLimit: 1000,
  crashWorkerOnError: true
})

export default socketCluster
Run Code Online (Sandbox Code Playgroud)

running node server.js启动worker.js中指定的worker进程

export const run = (worker) => {
  console.log(' >> worker PID: ',process.pid);

  const app = express();

  const httpServer = worker.httpServer;
  const scServer = worker.scServer;

  app.use(cookieParser())

  httpServer.on('request', app);

  app.get('/',(req,res) => {
    console.log('recieved')
    res.send('Hello world')
  })

}
Run Code Online (Sandbox Code Playgroud)

我想测试服务器,但测试在服务器实际启动之前完成(并且失败).有没有办法在进行测试之前强制服务器完全加载?这就是我到目前为止所拥有的 …

javascript mocha.js node.js express

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

在组件安装之前反应设置滚动位置

我有下面的反应组件,它本质上是一个聊天框

 render(){
    const messages = this.props.messages;
    return(
      <div id="project_chat">
        <h1>{this.props.project[0].project}</h1>
        <div className="chat_room">

          <div className="messages" ref="messages">
            <Waypoint onEnter={this.activateWayPoint}/>
            <ul>
              {messages.map((message) => {
                return(
                  <Message key={uuid.v4()} message={message}/>
                )
              })}
            </ul>
          </div>

          <div className="chat_message_box">
            <input type='text' onChange={this.handleChange} value={this.state.message} className="message_box" placeholder="enter message"/>
            <button className="submit_message" onClick={this.handleSubmit}>Submit</button>
          </div>

        </div>

      </div>
    )
  }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是聊天消息框从容器的最顶部位置开始(滚动位置从顶部开始).我希望滚动位置像普通聊天室一样位于底部.

所以我试着这样做:

  componentDidMount(){
    this.refs.messages.scrollTop = this.refs.messages.scrollHeight
  }
Run Code Online (Sandbox Code Playgroud)

这会触发组件安装后触发,即 - 消息框滚动位置最初从顶部开始,并在渲染时强制到底部.

这通常很好,但我正在使用一个名为的库react-waypoint,可以帮助我分页聊天消息.每当我在容器的顶部时,这就会被触发.

不愉快的后果是,因为消息框最初在mount时从顶部开始,所以路由点也总是在mount上被触发.

我的问题是我是否可以强制消息组件从底部位置开始,而不是从头开始并在开始时到达底部

我试过这样做

  componentWillMount(){
    this.refs.messages.scrollTop = this.refs.messages.scrollHeight
  }
Run Code Online (Sandbox Code Playgroud)

问题是我没有在组件安装之前访问refs.还有其他方法吗?

javascript reactjs

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

React useMemo 重新渲染问题

我尝试使用react-useMemo 来防止组件重新渲染。但不幸的是,它似乎没有解决任何问题,我开始怀疑我是否做错了什么

我的组件看起来像这样

function RowVal(props) {
  console.log('rendering');
  return (
    <Row toggleVals={props.toggleVals}>
      <StyledTableData centerCell>{props.num}</StyledTableData>
      <StyledTableData centerCell borderRight>
        {props.percentage}
      </StyledTableData>
    </Row>
  );
}
Run Code Online (Sandbox Code Playgroud)
  • toggleVals 是一个布尔值
  • num 是一个整数
  • 百分比属性是一个浮点值

为了防止重新渲染 - 我将以下内容添加到我的父组件中

function ChainRow(props) {
 const MemoizedRowVal = useMemo(
    () => (
      <RowVal
        num={props.num}
        percentage={props.percentage}
        toggleVals={props.toggleVals}
      />
    ),
    [props.toggleVals],
  );

  return (

   <div>{MemoizedRowVal}</div>
  )

}
Run Code Online (Sandbox Code Playgroud)

但尽管布尔值没有变化,该组件仍然不断重新渲染。

我做错了什么吗?

reactjs

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

如何处理反应服务器端渲染的css导入

这与在Isomorphic React Components中导入CSS文件非常相似

但建议的解决方案提出了一个条件语句,用于检查导入是从服务器还是浏览器完成的.问题是我在组件本身使用导入对象,如下所示

<a href="/auth/github" className={style.link}>Sign up with github </a>
Run Code Online (Sandbox Code Playgroud)

但是style未定义,因为我不在服务器上导入它.建议的另一种方法webpack-isomorphic-tools也要求我捆绑服务器端代码.这种方法也迫使你在服务器端使用webpack,我并不热衷于此.

基本上这是我的组件

import React from 'react';
import SignUp from './SignUp'
import {Link} from 'react-router'
import {connect} from 'react-redux';
import Modal from 'react-modal'
import style from './app.css'

class App extends React.Component{

  componentDidMount(){
    console.log('mounted')
  }

  render(){
    return (
      <div>
        <p> Hello Kj</p>
          <a href="/auth/github" className={style.link}>Sign up with github </a>
          <a href="/logout" className={style.logout}> Logout </a>
          <Link to ='/project'>Project</Link>
          <button onClick={this.openModal}> Login </button>
        <h1> {this.props.username} </h1>
        <h2> …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs webpack babeljs

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

向python中的变量添加换行符

我有以下功能来获得以下输出

22
4444
666666
Run Code Online (Sandbox Code Playgroud)

相反,我得到

'22\n4444\n666666\n88888888\n'
Run Code Online (Sandbox Code Playgroud)

我哪里出错了?

def EvenLadder(n):
    ...:     solution = ''
    ...:     if n <= 1:
    ...:         return solution
    ...:     elif n%2 ==0:
    ...:         for i in range(2,n+1,2):
    ...:             solution += (str(i)*i)+"\n"
    ...:     else:
    ...:         n = n - 1
    ...:         for i in range(2,n+1,2):    
    ...:             solution += (str(i)*i)+"\n"
    ...:     return solution
Run Code Online (Sandbox Code Playgroud)

python

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

提取响应未设置浏览器Cookie

我正在使用访存API在浏览器中设置Cookie。这是我的请求对象

fetch('/auth',{
      method:'POST',
      headers:{
        'Accept':'application/json',
        'Content-Type':'application/json'
      },
      body: JSON.stringify({
        username:this.state.username,
        password: this.state.password,
        email: this.state.email
      })
    })
    .then(function(response){
      console.log(response)
    })
    .catch(function(err){
      console.log(err)
    })
Run Code Online (Sandbox Code Playgroud)

在服务器端

db.one('insert into account(username,password,email) values ($1,$2,$3) returning * ',[req.body.username,hash,req.body.email])
    .then((result) => {
      console.log('successfully registered: ',result)
      const id_token = jwtSign(result)
      console.log('id_token: ',id_token)
      res.cookie('id_token',JSON.stringify(id_token),{ expires: new Date(Date.now() + (24 * 60 * 60 * 1000 * 30 * 12 * 10)), httpOnly: true })
      res.send({'id_token':id_token})
    })
    .catch((err) => {
      console.log('There was an error: ',err.message)
      res.send(JSON.stringify(err.message))
    })
Run Code Online (Sandbox Code Playgroud)

响应实际上具有SET_COOKIE标题

Set-Cookie:id_token=%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTMsInVzZXJuYW1lIjoia2oiLCJpYXQiOjE0Njg2MDk1Njl9.6w46UCTQwpQ4OIiwj-Ae54LLtYUrUgKjMKHJtepkiZk%22; …
Run Code Online (Sandbox Code Playgroud)

javascript cookies express

4
推荐指数
2
解决办法
2343
查看次数