在搜索了angular Universal很多天后,我发现缺乏有关ServerSideRendering实际工作方式的信息。
让我引导您解决我的疑虑,并帮助我澄清一些模糊点。
有很多指南会告诉您如何设置SSR需要注意哪些事项,例如不访问 DOM 或不使用 jquery。
它们都没有真正展示 angular Universal 在幕后的实际工作方式,尤其是当您访问外部 api 时。
我希望一个普通的 SSR 应用程序只在服务器上运行,创建一些 html,然后加载 html,直到客户端下载 javascript代码。
但是在使用外部 api 的情况下会发生什么?(这是一个非常常见的场景)。
我们的应用程序的服务器版本是否进行了真正的调用,从 api 获取真实数据,以使用 html 进行渲染?还是发生了其他事情?
同样在通过路由解析器调用的外部 api 的情况下。在这种情况下,SSR 可能吗?这意味着我们的应用程序必须以任何一种方式等待 api 响应。
我正在尝试实现angular Universal。但我想暂时将SSR限制在2条特定的路线上。原因是。
1)Universal 是一个仍在发展中的东西,它会导致一些意想不到的行为@angular/flex-layout 和nested lazy loading
2)我不需要在所有页面上进行 SEO
所以我试过这样的事情
app.get('/campaign/*/*', (req, res) => {
res.render(join(DIST_FOLDER, 'browser', 'index.html'), { req });
});
app.get('/', (req, res) => {
res.render(join(DIST_FOLDER, 'browser', 'index.html'), { req });
});
app.get('*', (req, res) => {
});
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在页面中导航时,它会 /campaign/new-channel 永远重新加载。
我期望的预期行为是页面通常不会呈现任何内容。
我想我必须做一些不同的事情,因为 node express 应该将路由的处理传递给 angular 。
知道如何实现这一点吗?server.ts
的其余代码从这里复制https://github.com/angular/universal-starter/blob/master/server.ts
PS有这篇关于stackoverflow Angular通用渲染的帖子仅适用于某些路线,但没有提供解决方案。所以我做了这个,因为我不知道我是否允许在答案中打开新线程
我有一个方法可以接收一个"month"参数和另一个"year" 参数,你可以同时接收它们或只接收其中一个。
在只接收月份的情况下,我想在一个名为“created_at”的字段中进行查询,只查找该字段日期的月份
目前我使用此代码,但是在执行类似操作时它没有正确执行
else if ($request->has('month')) {
$month = $request->input('month');
$currentTimestamp = date_create_from_format('n', $month)->getTimestamp();
$currentDate = date('m', $currentTimestamp);
$filters['updated_at'] = $currentDate;
unset($filters['month']);
}
$cars = Car::where(function($query) use($filters) {
foreach ($filters as $column => $value) {
if ($column === 'updated_at') {
$query->where($column, 'LIKE', '%'.$value.'%');
continue;
}
$query->where($column, 'LIKE', '%'.$value.'%');
}
})->orderBy('updated_at', 'desc')->get();
Run Code Online (Sandbox Code Playgroud) 我正在使用Laravel 5.6,应该为某些功能创建功能测试。在某些条件下,如果从第一个作业执行第二个作业,我如何测试两个作业的调度。
它看起来像这样:
class FirstJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
dispatch(new SecondJob());
}
}
Run Code Online (Sandbox Code Playgroud)
顺序断言看不到第二个作业。
Queue::assertPushed(FirstJob::class);// 断言
Queue::assertPushed(SecondJob::class);// 未断言