MarkLogic - node.js - How to require cts for search - node.js

I have the node db connection working okay I think:
var marklogic = require('marklogic');
var db = marklogic.createDatabaseClient({ ...
And now I want to do cts.search
How do I require cts?

You don't. The cts functions are for running queries within the database. Working with the Node.js Client API, you'll use the query builder. There's an example in the feature introduction, with more detail in the Getting Started tutorial and the Node.js Application Developer's Guide.
You may be mixing up the Node.js Client API with Server-side JavaScript. The former is used to have middle-tier Node.js code interact with MarkLogic. The latter is for writing REST API extensions or transformations that run within the database (and can be called from the Node API).

Related

expressJS exporting other things in addition to app

In my web application (I'm using expressJS), there are many services (such as mongoDB connection, MQTT connection, etc.) that need to be executed once the whole application is executed (using npm start command). Therefore, I can make use of these services in my entire application. For example, I want to use my MQTT connection in different files.
My idea is to export the MQTT connection, MongoDB connection, etc. in addition to the app this way:
//app.js
module.exports = {
app: app,
mqttConnection: myMQTTConnection,
db: myMongoDB
};
However, we know that this approach doesn't work (I tested it and got an error saying: TypeError: app.set is not a function).
How can I export other things in addition to app from app.js file?
If my approach is not possible, what other approaches can I use? (considering the fact that many services (such as connecting to a server, etc.) are asynchronous)

Console using postgres+sequelize with Node.js?

I am fairly new to Node but I am loving the tool. My only problem is when I want to have direct access to the database. I have a good experience with ruby on rails+postgres. Using rails console was very helpful when I was developing rails.
Is there some kind of equivalent I can use to have direct access to my database? I have uploaded my app to heroku so I would like something that I can run on heroku as well.
(I prefer not to use SQL, I am wondering if there is a sequelize console?)
Here is the way to do it:
node --experimental-repl-await
> models = require('./models');
> User = models.User; //however you load the model in your actual app this may vary
> await User.findAll(); //use await to avoid promise errors
TLDR
This gives you access to all of the models you have created and you can use the sequelize ORM commands like findAll, create etc.. just as you would in Rails active record.
Sequelize uses promises, so to run these properly in REPL you will want to use the --experimental-repl-await flag

socket.io authentication with socketio-auth

I've a server in node.js & Express and i use socket.io for real-time messaging and socketio-auth module for authentication,I setup everything for using this module but i found nothing about db object and findUser that the auther used in examples(not even an single line of comment about them) to work with,should i implement them myself,right?
if anyone have a working example of using or implementing them with redis i'll be grateful to see it.
the db and findUser object is from MongoDb and not related to socket.io. I would recommend you look at http://www.tutorialspoint.com/mongodb/ to gain a better understanding as to why they are used

Exposing Meteor's mongo DB to a stateless client

I need a legacy java application to pull information from a meteor's collection.
Ideally, I would need a simple service where my app would be able to download the latest list of items prices. A scenario like going on (through an http GET):
www.mystore.com/listOfPrices
would return a json with an array
[{"item":"beer", price:"2.50"}, {"item":"water":, price:"1"}]
The problem is that I cannot make a meteor page printing the result "as is" because meteor assumes the client supports javascript. Note that I do plan to implement the java DDP client in a latter stage but here I would like to start with a very simple service.
Idea: I thought of doing my own Node.js request aside of the running meteor service in order to retrieve a snapshot of the collection. Then this request would be using a server based javascript DDP client in order to subscribe and filter to then return the collection once loaded as a jSON document (array).
Any idea on how to achieve this ?
Looks like you want to provide a REST interface. See the MeteorPedia page on REST for how to expose collection data. It might be as simple as
prices = new Mongo.Collection('prices');
// Add access points for `GET`, `POST`, `PUT`, `DELETE`
HTTP.publish({collection: prices}, function (data) {
// here you have access to this.userId, this.query, this.params
return prices.find({});
});

What is Express.js? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 10 months ago.
The community reviewed whether to reopen this question 10 months ago and left it closed:
Needs more focus Update the question so it focuses on one problem only by editing this post.
Improve this question
I am a learner in Node.js.
What's Express.js?
What's the purpose of it with Node.js?
Why do we actually need Express.js? How is it useful for us to use with Node.js?
What's Redis? Does it come with Express.js?
1) What is Express.js?
Express.js is a Node.js framework. It's the most popular framework as of now (the most starred on NPM).
.
It's built around configuration and granular simplicity of Connect middleware. Some people compare Express.js to Ruby Sinatra vs. the bulky and opinionated Ruby on Rails.
2) What is the purpose of it with Node.js?
That you don't have to repeat same code over and over again. Node.js is a low-level I/O mechanism which has an HTTP module. If you just use an HTTP module, a lot of work like parsing the payload, cookies, storing sessions (in memory or in Redis), selecting the right route pattern based on regular expressions will have to be re-implemented. With Express.js, it is just there for you to use.
3) Why do we actually need Express.js? How it is useful for us to use with Node.js?
The first answer should answer your question. If no, then try to write a small REST API server in plain Node.js (that is, using only core modules) and then in Express.js. The latter will take you 5-10x less time and lines of code.
What is Redis? Does it come with Express.js?
Redis is a fast persistent key-value storage. You can optionally use it for storing sessions with Express.js, but you don't need to. By default, Express.js has memory storage for sessions. Redis also can be use for queueing jobs, for example, email jobs.
Check out my tutorial on REST API server with Express.js.
MVC but not by itself
Express.js is not an model-view-controller framework by itself. You need to bring your own object-relational mapping libraries such as Mongoose for MongoDB, Sequelize (http://sequelizejs.com) for SQL databases, Waterline (https://github.com/balderdashy/waterline) for many databases into the stack.
Alternatives
Other Node.js frameworks to consider (https://www.quora.com/Node-js/Which-Node-js-framework-is-best-for-building-a-RESTful-API):
UPDATE: I put together this resource that aid people in choosing Node.js frameworks: http://nodeframework.com
UPDATE2: We added some GitHub stats to nodeframework.com so now you can compare the level of social proof (GitHub stars) for 30+ frameworks on one page.
Full-stack:
http://sailsjs.org
http://derbyjs.com/
Just REST API:
http://mcavage.github.io/node-restify/
Ruby on Rails like:
http://railwayjs.com/
http://geddyjs.org/
Sinatra like:
http://expressjs.com/
Other:
http://flatironjs.org/
https://github.com/isaacs/npm-www
http://frisbyjs.com/
Middleware:
http://www.senchalabs.org/connect/
Static site generators:
http://docpad.org
https://github.com/jnordberg/wintersmith
http://blacksmith.jit.su/
https://github.com/felixge/node-romulus
https://github.com/caolan/petrify
This is over simplifying it, but Express.js is to Node.js what Ruby on Rails or Sinatra is to Ruby.
Express 3.x is a light-weight web application framework to help organize your web application into an MVC architecture on the server side. You can use a variety of choices for your templating language (like EJS, Jade, and Dust.js).
You can then use a database like MongoDB with Mongoose (for modeling) to provide a backend for your Node.js application. Express.js basically helps you manage everything, from routes, to handling requests and views.
Redis is a key/value store -- commonly used for sessions and caching in Node.js applications. You can do a lot more with it, but that's what I'm using it for. I use MongoDB for more complex relationships, like line-item <-> order <-> user relationships. There are modules (most notably connect-redis) that will work with Express.js. You will need to install the Redis database on your server.
Here is a link to the Express 3.x guide: https://expressjs.com/en/3x/api.html
What is Express.js?
Express.js is a Node.js web application server framework, designed for
building single-page, multi-page, and hybrid web applications. It is
the de facto standard server framework for node.js.
Frameworks built on Express.
Several popular Node.js frameworks are built on Express:
LoopBack: Highly-extensible, open-source Node.js framework for quickly
creating dynamic end-to-end REST APIs.
Sails: MVC framework for
Node.js for building practical, production-ready apps.
Kraken: Secure and scalable layer that extends Express by providing structure and
convention.
MEAN: Opinionated fullstack JavaScript framework that
simplifies and accelerates web application development.
What is the purpose of it with Node.js?
Why do we actually need Express.js? How it is useful for us to use with Node.js?
Express adds dead simple routing and support for Connect middleware, allowing many extensions and useful features.
For example,
Want sessions? It's there
Want POST body / query string parsing? It's
there
Want easy templating through jade, mustache, ejs, etc? It's
there
Want graceful error handling that won't cause the entire server
to crash?
Express.js is a modular web framework for Node.js
It is used for easier creation of web applications and services
Express.js simplifies development and makes it easier to write secure, modular and fast applications. You can do all that in plain old Node.js, but some bugs can (and will) surface, including security concerns (eg. not escaping a string properly)
Redis is an in-memory database system known for its fast
performance. No, but you can use it with Express.js using a redis
client
I couldn't be more concise than this. For all your other needs and information, Google is your friend.
ExpressJS is bare-bones web application framework on top of NodeJS.
It can be used to build WebApps, RESTFUL APIs etc quickly.
Supports multiple template engines like Jade, EJS.
ExpressJS keeps only a minimalist functionality as core features and as such there are no ORMs or DBs supported as default. But with a little effort expressjs apps can be integrated with different databases.
For a getting started guide on creating ExpressJS apps, look into the following link:
ExpressJS Introductory Tutorial
Express is a module framework for Node that you can use for applications that are based on server/s that will "listen" for any input/connection requests from clients. When you use it in Node, it is just saying that you are requesting the use of the built-in Express file from your Node modules.
Express is the "backbone" of a lot of Web Apps that have their back end in NodeJS. From what I know, its primary asset being the providence of a routing system that handles the services of "interaction" between 2 hosts. There are plenty of alternatives for it, such as Sails.
Express.js is a framework used for Node and it is most commonly used as a web application for node js.
Here is a link to a video on how to quickly set up a node app with express https://www.youtube.com/watch?v=QEcuSSnqvck
Express.js created by TJ Holowaychuk and now managed by the community. It is one of the most popular frameworks in the node.js. Express can also be used to develop various products such as web applications or RESTful API.For more information please read on the expressjs.com official site.
ExpressJS is a web application framework that provides you with a simple API to build websites, web apps and back ends. With ExpressJS, you need not worry about low level protocols, processes, etc.
Fast, unopinionated, minimalist web framework for Node.js
Pug (earlier known as Jade) is a terse language for writing HTML templates. It −
Produces HTML
Supports dynamic code
Supports reusability (DRY)
It is one of the most popular template language used with Express.
A perfect example of its power
router.route('/recordScore').post(async(req, res) => {
let gold_nation = req.body.gold && req.body.gold.nationality;
let silver_nation = req.body.silver && req.body.silver.nationality;
let bronze_nation = req.body.bronze && req.body.bronze.nationality;
let competition_id = req.body.competition_id;
console.log(gold_nation)
console.log(silver_nation)
req.body.gold && await country.updateOne({"flag" : gold_nation}, { $inc: { gold: 1 } });
req.body.silver && await country.updateOne({"flag" : silver_nation}, { $inc: { silver: 1 } });
req.body.bronze && await country.updateOne({"flag" : bronze_nation}, { $inc: { bronze: 1 } });
console.log(competition_id)
//await competition.updateOne({"_id" : competition_id}, {$set: {recorded : true}});
//!! Uncomment this and change model/competition.ts set recorer to recorded
// this is commented out so you can test adding medals for every case and not creating competitions every time
res.status(200).json("Success");
});
async record(){
let index = this.competitions.findIndex(e => e._id == this.selectedCompetition);
let goldIndex = this.competitors.findIndex(e => e._id == this.goldWinner);
let silverIndex = this.competitors.findIndex(e => e._id == this.silverWinner);
let bronzeIndex = this.competitors.findIndex(e => e._id == this.bronzeWinner);
console.log(this.competitors[goldIndex]);
console.log(this.competitors[1-goldIndex]);
this.sportService.recordCompetition(this.competitors[goldIndex],
this.competitors[1-goldIndex],
null,
this.competitions[index]).subscribe((m:string) => this.reset(m))
}
reset(message: string){
this.statusMessage = message;
if(message == "Success"){
this.competitions = this.competitions.filter( (c) => c._id != this.selectedCompetition);
this.goldWinner = '';
this.silverWinner = '';
this.bronzeWinner = '';
}
setTimeout(()=>{
this.statusMessage = '';
}, 3000);
}
router.route('/registerCompetitor').post(async(req, res) => {
//! PROVJERI DA LI JE FORMIRANJE TAKMICENJA ZAVRSENO
let competitors = req.body.map( c => ({
name: c.name,
gender: c.gender,
nationality: c.nationality,
sport: c.sport,
disciplines: c.disciplines
}));
console.log(competitors)
await country.updateOne({"flag" : competitors[0].nationality}, { $inc: { numberOfCompetitors: competitors.length } });
await competitor.collection
.insertMany(competitors)
.then( u => {
res.status(200).json("Ok")
})
.catch(err =>{ res.status(400).json("notOk");
});
});

Resources