我正在尝试使用UNION规则在单个表上执行多个查询
我有两张桌子:
我希望首先得到一组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) 我使用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容器才能执行此功能并将备份目录挂载到主机.
一种方法比另一种更好/更好吗?
我有一个节点应用程序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) 我有一个带有以下容器的 docker 应用程序
这是 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) 这类似于每个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)
我想测试服务器,但测试在服务器实际启动之前完成(并且失败).有没有办法在进行测试之前强制服务器完全加载?这就是我到目前为止所拥有的 …
我有下面的反应组件,它本质上是一个聊天框
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.还有其他方法吗?
我尝试使用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)
为了防止重新渲染 - 我将以下内容添加到我的父组件中
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)
但尽管布尔值没有变化,该组件仍然不断重新渲染。
我做错了什么吗?
这与在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) 我有以下功能来获得以下输出
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) 我正在使用访存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)