javascript - 重定向期间的 EPIPE 错误,Koa js,React 的 SSR
问题描述
我需要为 SSR (Koa.js + React.js) 进行重定向如果用户使用查询字符串进入主页,例如 site.ru/?test,那么我们需要重定向 site.ru
在本地主机上一切正常,但测试或产品版本不起作用(崩溃和一些错误)
你能检查我的屏幕吗
0|ssr-serv | 14-01-2019 10:07:42: { s: '' } 's'
0|ssr-serv | 14-01-2019 10:07:42: { s: '' } 's'
0|ssr-serv | 14-01-2019 10:07:42: Error: write EPIPE
0|ssr-serv | at _errnoException (util.js:1003:13)
0|ssr-serv | at WriteWrap.afterWrite (net.js:866:14
那么,为什么我有错误 EPIPE?
import Router from 'koa-router';
import get from 'lodash/get';
import 'colors';
import moment from 'moment';
import {
getOldTestament,
getNewTestament,
getReading,
getArticle,
getInterpretations,
getTranslates,
getSlider,
getMeta,
} from '../../libs/getData';
import checkReading from './checkReading';
import titleToVerseInReading from './titleToVerseInReading';
const router = new Router();
router.get('/', async (ctx, next) => {
let initialStore = {};
let directProps = {};
const { meta, headers } = ctx.locals;
let metaData = {};
// Redirect
console.log(ctx.request.query, ctx.request.querystring);
if (ctx.request.querystring && ctx.request.querystring !== 'auth-need') {
console.log(ctx.request.query, ctx.request.querystring);
ctx.redirect('/');
}
//
try {
const [
_oldTestament,
_newTestament,
_reading,
_article,
_interpretations,
_sliders,
_meta,
_translates,
] = await Promise.all([
getOldTestament(headers),
getNewTestament(headers),
getReading(headers),
getArticle(headers),
getInterpretations(headers),
getSlider(),
getMeta('main'),
getTranslates(headers),
]);
// TODO add to redux
// const { interpretations, pages } = get(_interpretations, 'data');
const { gospel_reading, apostolic_reading, morning_reading, more_reading, ...other } = get(
_reading,
'data.reading',
[],
);
const [
_gospel_reading,
_apostolic_reading,
_morning_reading,
_more_reading,
] = await Promise.all([
checkReading(gospel_reading),
checkReading(apostolic_reading),
checkReading(morning_reading),
checkReading(more_reading),
]);
metaData = get(_meta, 'data.meta', {});
initialStore = {
books: {
oldTestament: get(_oldTestament, 'data.books', []),
newTestament: get(_newTestament, 'data.books', []),
},
lid: {
data: {
reading: {
gospel_reading: titleToVerseInReading(gospel_reading, _gospel_reading),
apostolic_reading: titleToVerseInReading(apostolic_reading, _apostolic_reading),
morning_reading: titleToVerseInReading(morning_reading, _morning_reading),
more_reading: titleToVerseInReading(more_reading, _more_reading),
...other,
},
},
},
// article: { article },
translates: { translates: get(_translates, 'data.translates', []) },
};
directProps = {
latestNewsList: get(_article, 'data.article', []),
latestInterpretationsList: get(_interpretations, 'data.interpretations', []).map(inter => ({
id: inter.id,
username: inter.added_by.username,
date: moment
.unix(inter.added_at)
.locale('ru')
.format('DD MMM YYYY'),
verse: inter.verse[0],
author: get(inter, 'ekzeget.name', ''),
authorId: get(inter, 'ekzeget.id', 0),
investigated: inter.investigated,
})),
latestInterpretationsTotal: get(_interpretations, 'data.pages.totalCount', 0),
latestSlider: get(_sliders, 'data', {}),
};
} catch (error) {
console.error(error);
}
const { title, description } = metaData;
meta.push({
name: 'description',
content: description,
});
ctx.locals = {
initialStore,
meta,
directProps,
title,
};
await next();
});
export default router;
解决方案
好的,我刚刚添加了return to,因为我们需要在if下停止我们的代码
console.log(ctx.request.query, ctx.request.querystring);
if (ctx.request.querystring && ctx.request.querystring !== 'auth-need') {
console.log(ctx.request.query, ctx.request.querystring);
ctx.redirect('/');
return;
}
推荐阅读
- database - 如何从 cassandra 的提交日志中提取信息?
- java - 禁用junit测试的超时
- javascript - 找出最高值
- regex - Regex expression for repeated pattern
- amazon-vpc - 跨 AWS 区域的 OpenVPN 路由
- swiftui - 在测试的拆解阶段我无法删除我的应用程序
- javascript - 创建一个可以添加、触发和取消订阅事件的事件触发类
- error-handling - 使用带有易错映射函数的 filter_map 时如何聚合错误的迭代器?
- http - 并发请求时 HTTP 请求超时
- svn - 使用 TortoiseSVN 将文件从一个目录粘贴到签出目录给出“错误:文件已存在”