Angular CLI 6, Universal: Как правильно получить файлы cookie из объекта запроса ExpressJS? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть этот код, работающий на Angular 5.2.10 и Angular CLI 1.7.4:

@Injectable()
export class FmCookieService {
  constructor(@Optional() @Inject(REQUEST) private _request: Request) { }

  ...
}

Я ввожу токен REQUEST, предоставленный @nguniversal/express-engine, и использую его значение только на серверной платформе.

Я пытаюсь обновить систему до Angular 6 и Angular CLI 6 и получаю следующие ошибки при компиляции:

ERROR in ./node_modules/cookie-signature/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Projects\POCs\cli6-test\node_modules\cookie-signature'
ERROR in ./node_modules/etag/index.js
Module not found: Error: Can't resolve 'crypto' in 'C:\Projects\POCs\cli6-test\node_modules\etag'
ERROR in ./node_modules/destroy/index.js
Module not found: Error: Can't resolve 'fs' in 'C:\Projects\POCs\cli6-test\node_modules\destroy'
ERROR in ./node_modules/etag/index.js
Module not found: Error: Can't resolve 'fs' in 'C:\Projects\POCs\cli6-test\node_modules\etag'
ERROR in ./node_modules/express/lib/view.js
Module not found: Error: Can't resolve 'fs' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/send/index.js
Module not found: Error: Can't resolve 'fs' in 'C:\Projects\POCs\cli6-test\node_modules\send'
ERROR in ./node_modules/send/node_modules/mime/mime.js
Module not found: Error: Can't resolve 'fs' in 'C:\Projects\POCs\cli6-test\node_modules\send\node_modules\mime'
ERROR in ./node_modules/express/lib/request.js
Module not found: Error: Can't resolve 'http' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/express/lib/response.js
Module not found: Error: Can't resolve 'http' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/express/lib/application.js
Module not found: Error: Can't resolve 'http' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/express/lib/request.js
Module not found: Error: Can't resolve 'net' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/content-disposition/index.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\content-disposition'
ERROR in ./node_modules/express/lib/response.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/express/lib/view.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/express/lib/application.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\express\lib'
ERROR in ./node_modules/mime-types/index.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\mime-types'
ERROR in ./node_modules/send/index.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\send'
ERROR in ./node_modules/send/node_modules/mime/mime.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\send\node_modules\mime'
ERROR in ./node_modules/serve-static/index.js
Module not found: Error: Can't resolve 'path' in 'C:\Projects\POCs\cli6-test\node_modules\serve-static'
ERROR in ./node_modules/destroy/index.js
Module not found: Error: Can't resolve 'stream' in 'C:\Projects\POCs\cli6-test\node_modules\destroy'
ERROR in ./node_modules/iconv-lite/lib/streams.js
Module not found: Error: Can't resolve 'stream' in 'C:\Projects\POCs\cli6-test\node_modules\iconv-lite\lib'
ERROR in ./node_modules/iconv-lite/lib/extend-node.js
Module not found: Error: Can't resolve 'stream' in 'C:\Projects\POCs\cli6-test\node_modules\iconv-lite\lib'
ERROR in ./node_modules/send/index.js
Module not found: Error: Can't resolve 'stream' in 'C:\Projects\POCs\cli6-test\node_modules\send'
ERROR in ./node_modules/body-parser/lib/read.js
Module not found: Error: Can't resolve 'zlib' in 'C:\Projects\POCs\cli6-test\node_modules\body-parser\lib'

Это должно произойти в этой новой версии,вот причины, по которым # 9827 (комментарий) и вот это изменение @ angular / devkit commit diff .

Я нашел пару обходных путей, которые я не сделалмне это не очень нравится, и я закончил тем, что сделал что-то вроде (на server.ts):

app.engine('html', (_, options, callback) => {
  renderModuleFactory(AppServerModuleNgFactory, {
    document: template,
    url: options.req.url,
    extraProviders: [
      provideModuleMap(LAZY_MODULE_MAP),
      { provide: COOKIES_TOKEN, useValue: options.req.cookies }
    ]
  }).then(html => {
    callback(null, html);
  });
});

А потом я использую это COOKIES_TOKEN на серверной платформе, но я не уверенкакой подход должен быть рекомендован для этого.

Может кто-нибудь указать мне, каким был бы рекомендуемый способ доступа к файлам cookie из запроса ExpressJS при работе на серверной платформе?

...