Giter Site home page Giter Site logo

Comments (15)

dougwilson avatar dougwilson commented on April 27, 2024

So you can require('./app') from external files and get the express app that is not listening on any port (think unit tests and the like).

from generator.

kevinSuttle avatar kevinSuttle commented on April 27, 2024

My system sees www as a Unix executable (yes, I see the server config JS in the source of it). Seems to be an odd convention to adopt, no?

from generator.

defunctzombie avatar defunctzombie commented on April 27, 2024

No. It is not odd.
On May 8, 2014 9:16 AM, "Kevin Suttle" [email protected] wrote:

My system sees www as a Unix executable. Seems to be an odd convention to
adopt, no?


Reply to this email directly or view it on GitHubhttps://github.com//issues/25#issuecomment-42570300
.

from generator.

kevinSuttle avatar kevinSuttle commented on April 27, 2024

Helpful.

Care to elaborate?

from generator.

jonathanong avatar jonathanong commented on April 27, 2024

you'd want to separate your app logic and actually running your app. for development, /bin/www is the basics to get things going. but in production, you'd really want to use something more robust like https://github.com/unitech/pm2 and https://github.com/koajs/cluster for error handling, clustering and load balancing, etc. each app has its own best way of doing it

from generator.

kevinSuttle avatar kevinSuttle commented on April 27, 2024

Right, which validates my original comment of it being an odd convention, if it's per application. Tomato, tomahto. ¯\_(ツ)_/¯ 

from generator.

jonathanong avatar jonathanong commented on April 27, 2024

How is it an odd convention? the more important aspect is separation, but it's nice to run the server without typing node

from generator.

victorwoo avatar victorwoo commented on April 27, 2024

Why is it nice to run the server without typing node?
Is there any difference between "node app" and "npm start"?

from generator.

jonathanong avatar jonathanong commented on April 27, 2024

if you distribute your app as my-app, you can then do npm i -g my-app; my-app

from generator.

dougwilson avatar dougwilson commented on April 27, 2024

FYI everyone, the generator is supposed to demonstrate good practices. If you don't agree with how the generator works, you don't have to use it. The point of the generator is to generate an app base for you that follows good practices with npm and the build tools.

from generator.

victorwoo avatar victorwoo commented on April 27, 2024

Yes, I'm thinking about what's the better practice.
It seems a linux like path and can't cross platform. I think if it's better to separate shell script part and JavaScript part into individual files? e.g:

./bin/www:

#!/usr/bin/env node www.js

./bin/www.cmd:

node.exe www.js

.bin/www.js:

var app = require('../app');
app.set('port', process.env.PORT || 3000);

from generator.

dougwilson avatar dougwilson commented on April 27, 2024

It seems a linux like path and can't cross platform.

Just because there is a shebang file, doesn't make in linux-only. You can run it on Windows using node bin/www, but really you should just use npm start. The bin/www is a valid JavaScript file node.js can run.

This will work just fine when you publish your app to npm and npm install -g it, because npm will wrap that bin/www script into a .cmd file on Windows.

from generator.

victorwoo avatar victorwoo commented on April 27, 2024

OK, @dougwilson , thank you for your help!

from generator.

igor10k avatar igor10k commented on April 27, 2024

I was just wondering what's the best practice to use this new startup style with something like Socket.io 1.0 that needs an instance of http.Server()
What I ended up is something like

var server = require('https').Server(httpsOptions, app);
io = require('socket.io')(server);
app.listen = function () {
    return server.listen.apply(server, arguments);
};

It works but it looks dirty.

from generator.

dougwilson avatar dougwilson commented on April 27, 2024

@igor10k make a file named like io.js in the root and export the io server. Then in www, require it (like how app.js is required) and glue them together.

io.js:

var io = require('socket.io')() // yes, no server arg here; it's not required
// attach stuff to io
module.exports = io

bin/www:

#!/usr/bin/env node
var debug = require('debug')('{name}');
var app = require('../app');
var io = require('../io');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

io.attach(server);

from generator.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.