Next.js: nextjs/socket.io ::TypeError: Path must be a string. Received IncomingMessage

Created on 13 Aug 2017  路  3Comments  路  Source: vercel/next.js

Hi guys.I'm working with socket.io, but I got this error message for the route of /about

TypeError: Path must be a string. Received IncomingMessage
at assertPath (path.js:7:11)
at extname (path.js:887:5)
at new View (C:\UsersAdmin\Desktop\rinterestnode_modules\express\lib\view.js:57:14)
at Function.render (C:\UsersAdmin\Desktop\rinterestnode_modules\express\libapplication.js:570:12)
at app.get (C:\UsersAdmin\Desktop\rinterest\server.js:47:20)
at Layer.handle [as handle_request] (C:\UsersAdmin\Desktop\rinterestnode_modules\express\lib\router\layer.js:95:5)
at next (C:\UsersAdmin\Desktop\rinterestnode_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\UsersAdmin\Desktop\rinterestnode_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\UsersAdmin\Desktop\rinterestnode_modules\express\lib\router\layer.js:95:5)
at C:\UsersAdmin\Desktop\rinterestnode_modules\express\lib\router\index.js:281:22

Here is my file server

const path = require("path");
const app = require("express")();
const bodyParser = require("body-parser");
const session = require("express-session");

app.use(
     bodyParser.urlencoded({
          extended: true
     })
);

app.use(bodyParser.json());

app.use(
     session({
          secret: "change-me",
          resave: false,
          rolling: true,
          saveUninitialized: true,
          httpOnly: true,
          cookie: {
               maxAge: 60000 * 60 * 24 * 7 * 4
          }
     })
);

const server = require("http").Server(app);
const io = require("socket.io")(server);
const next = require("next");

const dev = process.env.NODE_ENV !== "production";
const nextApp = next({ dev });
const nextHandler = nextApp.getRequestHandler();

nextApp.prepare().then(() => {
     app.get("/about", (req, res) => {
          return app.render(req, res, "/about", req.params);
     });
     app.get("*", (req, res) => {
          return nextHandler(req, res);
     });

     server.listen(80, err => {
          if (err) throw err;
          console.log("> Ready on http://localhost");
     });
});

And here is my page pages/about.js

import React from "react";

export default class About extends React.Component {
     render() {
          return <div>/about</div>;
     }
}

very simple isn't it.i guess it is not a big problem and the issue will be closed quickly.thanks in advance!

Most helpful comment

return app.render(req, res, "/about", req.params);

should be

return nextApp.render(req, res, "/about", req.params);

All 3 comments

@timneutkens yes

return app.render(req, res, "/about", req.params);

should be

return nextApp.render(req, res, "/about", req.params);
Was this page helpful?
0 / 5 - 0 ratings