我为一所学校写了一个相当简单的网站...这个网站有新闻,文章,视频剪辑等
它的工作方式是在主页上我们向访客提供一些课程
>math
>geography
>chemistry
Run Code Online (Sandbox Code Playgroud)
用户根据用户选择在这些和网站内容上选择1
例如,如果用户选择数学,他将看到关于数学的新闻,文章,视频......现在这就是我在做什么(请求忽略语法错误)
Route::group(['prefix'=>'math'], function () {
Route::get('/news', 'NewsController@index')->name('news_index');
Route::get('/article', 'ArticleController@index')->name('article_index');
});
Route::group(['prefix'=>'geography'], function () {
Route::get('/news', 'NewsController@index')->name('news_index');
Route::get('/article', 'ArticleController@index')->name('article_index');
});
Route::group(['prefix'=>'chemistry'], function () {
Route::get('/news', 'NewsController@index')->name('news_index');
Route::get('/article', 'ArticleController@index')->name('article_index');
});
Run Code Online (Sandbox Code Playgroud)
基本上重复每个前缀的所有链接....但随着链接的增长,它将变得越来越难以管理......有没有更好的方法来做到这一点?就像是
Route::group(['prefix'=>['chemistry','math' , 'geography' ], function () {
Route::get('/news', 'NewsController@index')->name('news_index');
Route::get('/article', 'ArticleController@index')->name('article_index');
});
Run Code Online (Sandbox Code Playgroud)
-------------------------更新-------------
我试过这个
$myroutes = function () {
Route::get('/news', 'NewsController@index')->name('news_index');
Route::get('/article', 'ArticleController@index')->name('article_index');
};
Route::group(['prefix' => 'chemistry'], $myroutes);
Route::group(['prefix' => 'math'], $myroutes);
Route::group(['prefix' => 'geography'], $myroutes);
Run Code Online (Sandbox Code Playgroud)
它工作正常,问题是最后一个前缀附加到所有内部链接
例如,如果我点击数学
我的链接将是
site.com/math/news
但是加载页面上的所有链接都像
<a href="{{route('article_index')"> link to …Run Code Online (Sandbox Code Playgroud) 我想在页面加载时显示所有内容的预加载器,并在页面加载完成时隐藏它并显示内容(我不是在谈论内部链接 - 就像在浏览器中键入地址并等待要加载的页面.)像这个演示:https://demo.app-framework.com/
我试过这个:
var app = new Framework7({
// App root element
root: '#app',
// App Name
name: 'My App',
// App id
id: 'com.myapp.test',
on: {
init: function () {
console.log('App initialized');
},
pageInit: function () {
console.log('Page initialized');
app.preloader.hide();
},
}
// ... other parameters
});
var mainView = app.views.create('.view-main');
app.preloader.show();
Run Code Online (Sandbox Code Playgroud)
但它不起作用它像其他元素一样显示加载器并且不隐藏它,我不确定它是否可能.如果有人能指出我正确的方向,我将不胜感激.
在我的模型中我有
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Page extends Model
{
//
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我可以说Page:all()并从pages表中获取所有行,但我没有看到数据库中的Page模型和pages表之间的任何连接
它只是根据型号名称猜测表格名称(最后是额外的s的小写)或者在其他地方提到它?
在Laravel的早期版本中,在我需要以所有方法访问登录用户的控制器中,我曾经做过这样的事情:
class DashboardController extends Controller
{
private $user ;
function __construct(Request $request)
{
$this->middleware('auth');
$this->user = \Auth::user();
}
function func_1(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
function func_2(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
function func_3(){
$objects = Objects::where('user_id' , $this->user->id )->get();
}
Run Code Online (Sandbox Code Playgroud)
主要是因为我不喜欢默认语法,\Auth::user()但在升级到5.4之后,这不再适用了,而且我得到null了$this->user
但它在其他方法中工作正常.基本上,\Auth::user()返回null的__construct方法,但在其他功能工作正常.
I'm running a Node.js puppeteer script with pm2. It's important to keep this process stable. After 2 days of work I see 2 restarts in my pm2 stats.
I want to find out what is causing the restarts. In my error logs I see 3 main errors:
Error: Page crashed (puppeteer )
Error: Quit inactivity timeout (mysql)
or: Timed out after 30000 ms while trying to connect to Chrome! (puppeteer )
Run Code Online (Sandbox Code Playgroud)
Here is my error log (I've only left …
我试图使用此库连接到signalR api
https://pypi.org/project/signalr-client/
这是我的代码
from requests import Session
from signalr import Connection
with Session() as session:
#create a connection
connection = Connection("https://firouzex.exphoenixtrade.com/realtime", session)
#get chat hub
chat = connection.register_hub('GetNewAPIToken')
#start a connection
connection.start()
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误
$ python test.py
Traceback (most recent call last):
File "test.py", line 12, in <module>
connection.start()
File "C:\Users\Rooz\AppData\Local\Programs\Python\Python35\lib\site-packages\signalr\_connection.py", line 47, in start
negotiate_data = self.__transport.negotiate()
File "C:\Users\Rooz\AppData\Local\Programs\Python\Python35\lib\site-packages\signalr\transports\_auto_transport.py", line 16, in negotiate
negotiate_data = Transport.negotiate(self)
File "C:\Users\Rooz\AppData\Local\Programs\Python\Python35\lib\site-packages\signalr\transports\_transport.py", line 28, in negotiate
negotiate.raise_for_status()
File "C:\Users\Rooz\AppData\Local\Programs\Python\Python35\lib\site-packages\requests\models.py", line 940, in raise_for_status …Run Code Online (Sandbox Code Playgroud) 所以我打开一个网站,为所有重定向做完捕获验证码图像并将其发送给用户并将其发送给用户并重新输入打印的验证码
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('http://localhost/p1.php' );
await page.waitForNavigation();
const captcha_image = await page.$eval('#security', e => e.getAttribute('src'));
io.emit('send_captcha_to_client' , {text : captcha_image });
var captcha = await captchaPromise;
Run Code Online (Sandbox Code Playgroud)
在我重新获得capthca的类型值后,我将它放在字段中并单击登录按钮
await page.$eval('#W_CAPTCHA', (el , _captcha) => el.value = _captcha.W_CAPTCHA , captcha );
await page.click('#login-btn');
Run Code Online (Sandbox Code Playgroud)
现在点击按钮后,ajax请求将被发送到服务器,让我们说http://example.com/login.php ...如果验证码是正确的,我将被重定向到我的仪表板,但如果ajax调用返回,请说{status:er}
并且 <span id="alert"></span>在页面中它将为其添加.Error类并将错误文本放在那里...我如何拦截ajax调用并检查登录是否成功?
我可以查看ajax调用的结果或等待并检查文档div.Error 但不知道我怎么能做到这些...这是我失败的尝试!
await page.waitForNavigation();
page.waitForSelector('.Error');
const error = await page.$eval('.Error', e => e.value );
console.log(error);
browser.close();
Run Code Online (Sandbox Code Playgroud) 我试图在单个浏览器实例中打开多个选项卡,完成后我关闭这些选项卡,然后每隔x秒重新打开这些选项卡...但是我想保持浏览器本身处于打开状态,因此我不必登录每个循环中的每个选项卡
因此浏览器保持打开状态,标签页会打开和关闭
这是我的简化代码,请忽略语法错误
var global_browser = false ;
async function init_puppeteer( settings ) {
if(global_browser === false )
global_browser = await puppeteer.launch({headless: false , args:['--no-sandbox']});
for(var i = 0 ; i < settings.length ; i++ )
{
var setting = settings[i];
open_tab($setting);
}
}
async function open_tab( setting ){
const page = await global_browser.newPage();
// do stuff
page.close();
}
setInterval(function (){
init_puppeteer(settings)
}, 50000 );
Run Code Online (Sandbox Code Playgroud)
这是问题所在,有时浏览器崩溃或由于某种原因而关闭,但global_browser仍然是伪造对象的对象/实例...诅咒当我尝试使用该实例打开选项卡时它将无法正常工作,并且我得到类似
(node:5720) UnhandledPromiseRejectionWarning: Error: WebSocket is not open: readyState 3 (CLOSED)
Run Code Online (Sandbox Code Playgroud)
这是我的问题,我该如何检查并确保我有puppeteer的工作/开放实例global_browser …
我正在尝试记录 puppeteer 以查看当我在服务器上运行它时会发生什么,因为我知道这个包可以满足我的需求。
https://www.npmjs.com/package/puppeteer-recorder
所以这是我的代码的简化版本
const puppeteer = require('puppeteer');
const { record } = require('puppeteer-recorder');
var path = 'C:\\wamp64\\www\\home_robot\\';
init_puppeteer();
const global_browser ;
async function init_puppeteer() {
global_browser = await puppeteer.launch({headless: false , args: ['--no-sandbox', '--disable-setuid-sandbox']});
check_login()
};
async function check_login()
{
try {
const page = await global_browser.newPage();
await page.setViewport({width: 1000, height: 1100});
await record({
browser: global_browser, // Optional: a puppeteer Browser instance,
page: page, // Optional: a puppeteer Page instance,
output: path + 'output.webm',
fps: 60,
frames: 60 …Run Code Online (Sandbox Code Playgroud) 想象一下这个场景,我有一个网站,用户通过销售他们的项目或点击广告或任何我的用户表将是这样的活动得到信任
users : id , username , credit
15 , alex , 1000
16 , jack , 1500
Run Code Online (Sandbox Code Playgroud)
所以现在用户可以要求在某种支付方式中提取信用卡,我的提款表就是这样的
withdraws :
id , user_id , amount
1 , 15 , 500
2 , 16 , 100
Run Code Online (Sandbox Code Playgroud)
我不得不从他们的信用中扣除提款金额...我喜欢用触发器做这件事
CREATE TRIGGER withdraw
BEFORE INSERT
ON withdraws
FOR EACH ROW
BEGIN
UPDATE users SET credit = credit-NEW.amount WHERE id = NEW.user_id;
END $$
Run Code Online (Sandbox Code Playgroud)
并确保用户在撤销过程中不能以负面信用结束我有这个触发器(诅咒我也会在代码逻辑中检查这一点)
CREATE TRIGGER update_user
BEFORE UPDATE
ON users
FOR EACH ROW
BEGIN
IF NEW.credit < 0 THEN
SIGNAL SQLSTATE '45000' …Run Code Online (Sandbox Code Playgroud) javascript ×4
puppeteer ×4
laravel ×3
php ×3
laravel-5.4 ×2
ajax ×1
laravel-5 ×1
laravel-5.2 ×1
mysql ×1
node.js ×1
pm2 ×1
python ×1
security ×1
signalr ×1
sql ×1