Hi all
I am using knex and resitfy for my API server. I am trying to do the following
db('table').where({
id: tableId
})
.then(function(stuff){...})
.then(function(morestuff){...})
.catch(function(error){
res.send(400,{error.message});
return next();
}
I have an after function that runs to log traffic, so calling next() is always necessary. However, this block of code gives this warning
Warning: a promise was created in a handler at domain.js:300:12 but was not returned from it
Hi! Noob here playing around with restify. I have a simple restify app, and I wonder why server.on('after' always fires an err, even though nothing seems amiss?
Err obj:
{"methods":["GET"],"name":"get","params":{},"spec":{"path":{},"method":"GET","versions":[],"name":"get"}}
Server.on after snip:
server.on('after', function(req, res, err){
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress;
let reqStr = req.toString(),
shortReqArr = reqStr.split('HTTP'),
shortReq = shortReqArr[0];
logga(timeDate() + ' 200: ' + shortReq + ' ip: ' + ip);
if (err) {
console.log(timeDate() + ' server after error ' + JSON.stringify(err) + ' \n' );
}
next();
});
https://myapp.com/docs/
, I get this error: {"code":"ResourceNotFound","message":"/docs/"}
file
in opts
, it defaults to directory
+ req.path
, which becomes doc/docs
this is not the desired behavior, and doesn't seem to be the behavior described in the documentation
The above
route
anddirectory
combination will serve a file located in./documentation/v1/docs/current/index.html
when you attempt to hithttp://localhost:8080/docs/current/
.
@ashishpai2 I've faced the same question three times already. There are many options to consider (which, in my book, is a bit unfortunate), and there are tradeoff's to be considered.
Between Restify and Express the choice is somewhat simple: if you only need API, Restify is the best choice. Restify endpoints can be mostly seamlessly ported to Express if you need to change later.
However, both Restify and Express are "unopinionated", meaning, they don't give you any suggestion of structure. You can have all endpoints in a single file for all they care. And so they won't help you add more structure. I'd go with them only on the simplest of projects, and knowing that I may either want to discard them later on or face a real challenge once things start to get more complex.
Alternatives? You should look at Loopback, which seems very mature. There are others which I haven't considered yet, as you can see here: http://nodeframework.com/index.html#rest-api.
server.get('/endpoint', callback);
but is there a way to have all routes in a file, and in one go "attach" them to the server
object? like const routes = require('/routes');
server.get('/endpoint2', callback); // a normal route
server.routes.attach(routes); // attach all from that routes/index.js file
Dinoloop has been designed from the start for gradual adoption, and you can use as little or as much dinoloop as you need. Perhaps you only want to develop some "REST APIs" using dinoloop and other REST APIs can be developed using expressjs. In this section, we will show how to create dinoloop REST API to an existing express app.
Step 1: Add HomeController (file: home.controller.ts)
import { ApiController, Controller, HttpGet } from 'dinoloop';
@Controller('/home')
export class HomeController extends ApiController {
@HttpGet('/get')
get(): string {
return 'Hello World!';
}
}
Step 2: Mount dinoloop and bind to express instance (file: app.ts)
const app = express();
app.use(bodyParser.json());
// Dino requires express instance and base-uri to which dino will be mounted
const dino = new Dino(app, '/api');
// Dino requires express router too
dino.useRouter(() => express.Router());
// Register controller
dino.registerController(HomeController);
// Bind dino to express
dino.bind();
// These are your normal express endpoints
app.get('/home', (req, res, next) => {
res.status(200).json('Hello World!');
});
app.get('/about', (req, res, next) => {
res.status(200).json('Hello World!');
});
// Start your express app
app.listen(8088, () => console.log('Server started on port 8088'));
Dinoloop is mounted on /api and all of its controller routes/endpoints which are registered with dinoloop are also mounted on /api. Dinoloop will handle those requests which are mounted on /api i.e. /api/home/get, the other end points /home and /about which are created by expressjs are not handled by dinoloop, this way you can slowly migrate your existing express app to dinoloop or you can start writing your new REST APIs using dinoloop.
please find the reference: https://github.com/ParallelTask/dinoloop