dfischer / meteor-prerenderio

A meteor wrapper for https://prerender.io/
56 stars 9 forks source link

TypeError: Object #<IncomingMessage> has no method 'get' #1

Closed dfischer closed 9 years ago

dfischer commented 9 years ago
TypeError: Object #<IncomingMessage> has no method 'get'
    at Function.prerender.buildApiUrl (/Users/Daniel/Code/myapp/myapp-app/packages/npm-container/.build.npm-container/npm/node_modules/prerender-node/index.js:203:11)
    at Function.prerender.getPrerenderedPageResponse (/Users/Daniel/Code/myapp/myapp-app/packages/npm-container/.build.npm-container/npm/node_modules/prerender-node/index.js:146:30)
    at /Users/Daniel/Code/myapp/myapp-app/packages/npm-container/.build.npm-container/npm/node_modules/prerender-node/index.js:15:15
    at Function.prerender.beforeRenderFn (/Users/Daniel/Code/myapp/myapp-app/packages/npm-container/.build.npm-container/npm/node_modules/prerender-node/index.js:223:34)
    at Object.module.exports [as handle] (/Users/Daniel/Code/myapp/myapp-app/packages/npm-container/.build.npm-container/npm/node_modules/prerender-node/index.js:8:13)
    at next (/Users/Daniel/.meteor/packages/webapp/.1.1.2.akzpf6++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:190:15)
    at Object.Package [as handle] (packages/gadicohen:headers/headers-server.js:205)
    at next (/Users/Daniel/.meteor/packages/webapp/.1.1.2.akzpf6++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:190:15)
    at next (/Users/Daniel/.meteor/packages/webapp/.1.1.2.akzpf6++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:165:78)
    at Function.app.handle (/Users/Daniel/.meteor/packages/webapp/.1.1.2.akzpf6++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:198:3)
dfischer commented 9 years ago

@electricjesus this is the error I get when trying to hit it locally. Apparently this is an error that can come up if the order of params is wrong with express? Not sure, but that was with some minor googling. What version of prerender-node did you use with Meteor?

electricjesus commented 9 years ago

Aha, I totally forgot all about the differences between express and connect's request object. Basically express has an extra function called req.get on the Request object that simply just returns the corresponding header.

Here's a quick fix:

WebApp.connectHandlers.use(function(req, res, next) {
        req.get = function(param) {
          return req.headers[param.toLowerCase()];
        };

        prerenderio(req, res, next);
        return next();
});

I have tested this, however now I seem to be getting this:


Error: Can't set headers after they are sent.
     at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)
     at ServerResponse.res.setHeader (/home/seth/.meteor/packages/webapp/.1.1.3.mekt++os+web.browser+web.cordova/npm/node_modules/connect/lib/patch.js:59:22)
     at next (/home/seth/.meteor/packages/webapp/.1.1.3.mekt++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:153:13)
     at next (/home/seth/.meteor/packages/webapp/.1.1.3.mekt++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:127:23)
     at Object.handle (app/prerenderio.js:28:9)
     at next (/home/seth/.meteor/packages/webapp/.1.1.3.mekt++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:190:15)
     at Function.app.handle (/home/seth/.meteor/packages/webapp/.1.1.3.mekt++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:198:3)
     at Object.fn [as handle] (/home/seth/.meteor/packages/webapp/.1.1.3.mekt++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:74:14)
     at next (/home/seth/.meteor/packages/webapp/.1.1.3.mekt++os+web.browser+web.cordova/npm/node_modules/connect/lib/proto.js:190:15)
     at Object.WebAppInternals.staticFilesMiddleware (packages/webapp/webapp_server.js:400)

hasn't happened before to be honest.. must be a timing issue somewhere since prerender seems to want to modify headers..

electricjesus commented 9 years ago

OK the above pull request actually comes through without errors at all. Can you check?

electricjesus commented 9 years ago

ah f-- that was a stupid commit. Resubmitted.

dfischer commented 9 years ago

End up getting this error:

Your app is crashing. Here's the latest log.

Akismet: Successfully authenticated key and blog
Prerender Token: token

/Users/Daniel/Code/myapp/myapp-app/.meteor/local/build/programs/server/packages/meteorhacks_kadira.js:3078
    throw err;                                                                
          ^
ReferenceError: WebApp is not defined
    at Package (packages/dfischer:prerenderio/dfischer:prerenderio.js:6)
    at /Users/Daniel/Code/myapp/myapp-app/.meteor/local/build/programs/server/packages/dfischer_prerenderio.js:163:4
    at /Users/Daniel/Code/myapp/myapp-app/.meteor/local/build/programs/server/packages/dfischer_prerenderio.js:170:3
    at /Users/Daniel/Code/myapp/myapp-app/.meteor/local/build/programs/server/boot.js:168:10
    at Array.forEach (native)
    at Function._.each._.forEach (/Users/Daniel/.meteor/packages/meteor-tool/.1.0.33.n7158r++os.osx.x86_64+web.browser+web.cordova/meteor-tool-os.osx.x86_64/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
    at /Users/Daniel/Code/myapp/myapp-app/.meteor/local/build/programs/server/boot.js:82:5
=> Exited with code: 7
=> Your application is crashing. Waiting for file change.
dfischer commented 9 years ago

If I wrap it in meteor.startup which you removed I get this:

Unexpected error

W20141024-12:12:11.252(-7)? (STDERR)
W20141024-12:12:11.254(-7)? (STDERR) /Users/Daniel/Code/myapp/myapp-app/.meteor/local/build/programs/server/packages/meteorhacks_kadira.js:3084
W20141024-12:12:11.255(-7)? (STDERR)     throw err;
W20141024-12:12:11.256(-7)? (STDERR)           ^
W20141024-12:12:11.257(-7)? (STDERR) ReferenceError: deprecate is not defined
W20141024-12:12:11.258(-7)? (STDERR)     at ServerResponse.send (packages/dfischer:prerenderio/dfischer:prerenderio.js:58)
W20141024-12:12:11.259(-7)? (STDERR)     at /Users/Daniel/Code/opensource/dfischer:prerenderio/.build.dfischer:prerenderio/npm/node_modules/prerender-node/index.js:20:20
W20141024-12:12:11.270(-7)? (STDERR)     at Gunzip.<anonymous> (/Users/Daniel/Code/opensource/dfischer:prerenderio/.build.dfischer:prerenderio/npm/node_modules/prerender-node/index.js:177:5)
W20141024-12:12:11.291(-7)? (STDERR)     at Gunzip.emit (events.js:117:20)
W20141024-12:12:11.292(-7)? (STDERR)     at _stream_readable.js:929:16
W20141024-12:12:11.293(-7)? (STDERR)     at process._tickCallback (node.js:419:13)
electricjesus commented 9 years ago

How about now? deprecate was just part of the express send API that just shows (developers) deprecation messages depending on a module. I put in a quick replacement function but if you want to use the original you can just do var deprecate = Npm.require('depd')('express');

dfischer commented 9 years ago

@electricjesus i don't see any commits or PRs? I'll try that var deprecate in the mean time.

dfischer commented 9 years ago

@electricjesus so I tried it again and I Just get a blank page.

It sent the request to prerenderio but it's a blank html page.

(STDERR) Mon, 27 Oct 2014 21:32:10 GMT express deprecated res.send(status, body): Use res.status(status).send(body) instead at ../../../../../../../opensource/dfischer:prerenderio/.build.dfischer:prerenderio/npm/node_modules/prerender-node/index.js:20:20
dfischer commented 9 years ago

Actually I think we're good. It didn't work because of localhost. Thanks buddy! :+1:

electricjesus commented 9 years ago

Yup. put in a meta fragment always if your page is JS generated (i.e. all of meteor client-side :D)

Have a good day!

SETH C. MALAKI - I.T. EXPERT EXTRAORDINAIRE. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *- - - - - -

"Better call E.J.!" *-you.*

On Tue, Oct 28, 2014 at 6:34 AM, Daniel Fischer notifications@github.com wrote:

Closed #1 https://github.com/dfischer/meteor-prerenderio/issues/1.

Reply to this email directly or view it on GitHub https://github.com/dfischer/meteor-prerenderio/issues/1#event-184384158.